KEMBAR78
Security testing in mobile applications | PDF
Security testing in mobile
applications
José Manuel Ortega Candel
About me
 Centers Technician at Everis
 Computer engineer by Alicante University
 Frontend and backend developer in Java/J2EE
 Speaker site with some presentations in
mobile and security
https://speakerdeck.com/jmortega
Index
Security Testing for Mobile Apps
Risk Management & Security Threads
Vulnerabilities & Mobile Security Risks
Testing Components Security & Tools
Security Test Plan & Best Practices
Security Testing for Mobile Apps
Security Testing for Mobile Apps
White Box Testing
Static Analysis Code
Black Box Testing
Dinamyc Analysis at
Runtime
Static Application Security Testing
Source code Review Reverse engineering
Lint for Android
Studio
Sonar Plugins for
mobile
http://www.sonarqube.org
Static Application Security Testing
Static Application Security Testing
https://github.com/SonarCommunity/sonar-android
Static Application Security Testing
http://sourceforge.net/projects/agnitiotool
You can decompile APKs and
search calls dangerous functions.
Reverse engineering on Android
APK Tool /Dex2jar/Java Decompiler
Static analysis on iOS
Xcode Development environment
Apple Developer Tools
‘otool’ command provided by XCode can be used to
get information from iOS application binaries and can
be used to support security analysis.
Static analysis on iOS
Detect memory leaks with XCode
Clang Static Analyzer
http://clang-analyzer.llvm.org
Flawfinder(Security weakness in C/C++)
http://www.dwheeler.com/flawfinder
Dynamic Application Security Testing
Analyze Network
Traffic at runtime
Analyze Remote
Services
DroidBox for Android
Instruments for iOS
Discovering logical
vulnerabilities
Dynamic Application Security Testing
 https://code.google.com/p/droidbox
Monitoring Actions
 Information leaks Network IO and File IO
 Cryptography operations SMS and Phone calls
Dynamic Application Security Testing
Instruments for iOS applications
File Activity Monitoring
Memory Monitoring Process Monitoring
Network Monitoring
Application Security Analyser
python androwarn.py -i my_apk.apk -r html -v 3
Telephony identifiers exfiltration: IMEI, IMSI, MCC, MNC, LAC, CID, operator's
name...
Device settings exfiltration: software version, usage statistics, system settings, logs...
Geolocation information leakage: GPS/WiFi geolocation... Connection interfaces
information exfiltration: WiFi credentials, Bluetooth MAC adress...
Telephony services abuse: premium SMS sending, phone call composition...
Audio/video flow interception: call recording, video capture... Remote connection
establishment: socket open call, Bluetooth pairing, APN settings edit...
PIM data leakage: contacts, calendar, SMS, mails...
External memory operations: file access on SD card...
PIM data modification: add/delete contacts, calendar events... Arbitrary code
execution: native code using JNI, UNIX command, privilege escalation...
Denial of Service: event notification deactivation, file deletion, process killing, virtual
keyboard disable, terminal shutdown/reboot...
Risk Management
Intelligence
Gathering
Threat model
Vulnerabilities
OWASP
Security risks
Security
threads
Intelligence Gathering
Environmental
Analysis
Architectural
Analysis
Analyze internal
processes and structures
App [network interfaces, used
data, communication with other
resources, session management]
Runtime environment [MDM,
jailbreak/rooting, OS version]
Backend services [application
server, databases]
Intelligence Gathering
What type of device is it?
Determine Operating System version
Is the device already rooted?
Is the device passcode enabled?
What key applications are installed?
Is the device connected to network?
Thread model in Mobile applications
Functional Security threads
Authentication
Session
Management
Access Control
Input Validation
Cryptography
Error Handling and
Logging
Data Protection
Communication
Security
Security issues
Malicious Applications
– Rooting Exploits
– SMS Fraud
– Rapid Malware Production
Dynamic Analysis
– Sandbox
– Real-time Monitoring
– Mobile Specific Features
Static Analysis
– Permissions
– Data Flow
– Control Flow
Browser Attacks
– Phishing
– Click Through
Mobile Botnets
– Epidemic Spread
– Attacking Network Services
– Tracking Uninfected Devices
User Education
– Ignoring Permissions
– Phishing
– Improperly Rooting Devices
– Alternative Markets
Vulnerabilities
Third party
libraries
Components
WebView
[JavaScript+Cache]
SQLite DataBase
Multiplaftorm
libraries for hybrid apps
Shared Preferences
Vulnerabilities
1. Activity monitoring and
data retrieval
2. Unauthorized dialing,
SMS, and payments
3. Unauthorized network
connectivity (exfiltration or
command & control)
4. UI Impersonation
5. System modification
(rootkit, APN proxy config)
6. Logic or Time bomb
7. Sensitive data leakage
(inadvertent or side
channel)
8. Unsafe sensitive data
storage
9. Unsafe sensitive data
transmission
10. Hardcoded
password/keys
Vulnerabilities Analysis
Static methods
Dynamic
methods
Automatic and manual
source code analysis
Reverse Engineering
Forensic
methods
Network monitoring and
trafic analyzing
Runtime analysis
Log analysis
File permission analysis
File content analysis
Dynamic methods tools
Network monitoring and
traffic analyzing
Runtime analysis
Wireshark, BurpSuite
GNU debugger,
Snoop-it, Cycript
Mercury, Intent Sniffer,
Intent Fuzzer
File analysis androidAuditTools
Testing vulnerabilities
Data flow
Data Storage
Data leakage
Authentication
Authorization
Server-side
OWASP Mobile Security Risks
Insecure Data
Storage
Transport Layer
Protection,
HTTP/SSL
Authorization and
Authentication
Cryptography /
Encrypting data
Session handling
Weak Server Side
Controls in backend
services
Sensitive information
[passwords,API
keys,code ofuscation]
Data Leakage [cache,
logging, temp
directories]
Testing components security
Content Providers Data Storage
WebViewServices
NetWork Connections
[HTTP / SSL]
Certificates
Data Encryption
SQLite
Shared Preferences
File storage
HTTPS and SSL can protect against Man in the Middle
attacks and prevent casual snooping
Data Storage
Encrypt data
Never store user credentials
Tools like SQLCipher for storing
database in applications
No global permissions granted to
applications, using the principle of
"least privilege".
Secure Storage on Android
The access permission of the created file was set to
WORLD_READABLE / WORLD_WRITABLE
Other app could read /write the file if the file path is known.
Application data (private files) should be created
with the access permission MODE_PRIVATE
FileOutputStream fos = openFileOutput(“MyFile",
Context.MODE_PRIVATE);
fos.write(“contenido”.getBytes());
fos.close();
Insecure Data on Android
Look for file open operations using
Context.MODE_WORLD_READABLE
(translates to “1”)
Secure Storage on iOS
NSFileManager class
NSFileProtectionKey attribute
 NSFileProtectionNone – Always accessible
 NSFileProtectionComplete – Encrypted on disk
when device is locked or booting
[[NSFileManager defaultManager] createFileAtPath:[self
filePath]
contents:[@"super secret file contents“
dataUsingEncoding:NSUTF8StringEncoding]
attributes:[NSDictionary
dictionaryWithObject:NSFileProtectionComplete
forKey:NSFileProtectionKey]];
DataBase Storage
Support iOS / Android
https://www.zetetic.net/sqlcipher/open-source
256-bit AES Encrypt SQLite database
Secure Preferences on Android
https://github.com/scottyab/secure-preferences
3rd-party extensions
Secure Shared Preferences
Cryptography
Android and iOS implement standard crypto libraries such as AES
algorithm
try{
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt,
PBE_ITERATION_COUNT, 256);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(PBE_ALGORITHM);
SecretKey tmp = keyFactory.generateSecret(keySpec);
// Encrypt
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher encryptionCipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec ivspec = new IvParameterSpec(initVector);
encryptionCipher.init(Cipher.ENCRYPT_MODE, secret, ivspec);
encryptedText = encryptionCipher.doFinal(cleartext.getBytes());
// Encode encrypted bytes to Base64 text to save in text file
result = Base64.encodeToString(encryptedText, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace()
}
Android provides the javax.crypto.spec.PBEKeySpec
and javax.crypto.SecretKeyFactory classes to facilitate
the generation of the password-based encryption key.
Avoid Data Leackage on Android
public static final boolean SHOW_LOG =
BuildConfig.DEBUG;
public static void d(final String tag, final String msg) {
if (SHOW_LOG)
Log.d(tag, msg);
}
Don't expose data through logcat on production
-assumenosideeffects class android.util.Log
{
public static *** d(...);
public static *** v(...);
public static *** i(...);
public static *** e(...);
}
Proguard configuration
Permissions in mobile apps
AndroidManifest.xml on Android
 Try to minimize permissions
<manifest package="com.example.android" …>
<uses-permission android:name=“android.permission.
ACCESS_FINE_LOCATION"/>
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.READ_CONTACTS" />
…
</manifest>
Permissions in mobile apps
info.plist on iOS
Vulnerability scanner on Android
Vulnerability scanner on Android
Vulnerability scanner on Android
Tools / Santoku Linux
Security test plan
Test cases Example
Test Title /level Encryption /critical
Test
Description
When connections are used encryption
is used for sending / receiving sensitive
data.
Details and
tools
All sensitive information (personal data,
credit card & banking information etc.)
must be encrypted during transmission
over any network or communication
link.
Expected
result
It has been declared that the
Application uses encryption when
communicating sensitive data.
Security test plan
Test cases Example
Test Title /level Passwords /critical
Test
Description
Passwords and sensitive data are not
stored in the device and not echoed
when entered into the App, sensitive
data is always protected by password.
Details and
tools
The objective of the test is to minimize
the risk of access to sensitive
information should the device be lost,
by ensuring that no authentication data
can be re-used by simply re-opening
the application
Security test plan
Test cases Example
Test Title /level Passwords /critical
Expected
result
1. Entering a password or other
sensitive data will not leave it in
clear text if completion of the fields
is interrupted but not exited.
2. Passwords, credit card details, or
other sensitive data do not remain
in clear text in the fields where they
were previously entered, when the
application is reentered.
3. Sensitive personal data should
always need entry of a password
before it can be accessed.
Best Practices
Integrate security in Continuous
Integration (CI) process
Apply encryption /decryption techniques
used for sensitive data communication
Detect areas in tested application that have
more risks to detect vulnerabilities
Install an automated security vulnerability
scanner, integrated with your continuous
integration tool
Attacker vs Defenders
Defenders Attackers
Often have limited time to
put defences in place
Can take time to plan their
attack
Have limited opportunities
to improve their defences
Can invent new ways to
attack
Need to defend against a
range of possible attacks
Need only pick the most
effective one
Need to defend all entry
points
Can choose where to
attack
Has limited resources to
defend
Can be multiple attackers
References
https://www.owasp.org/index.php/OWASP_Mobile_Security_
Project
http://developer.android.com/training/articles/security-
tips.html
OWASP Mobile Security Project
Android Security Best Practices
References
https://github.com/secmobi/wiki.secmobi.com
Tools
IOS Application Security Testing
https://www.owasp.org/index.php/IOS_Application_Security_
Testing_Cheat_Sheet
Books
Thank You,
Questions?

Security testing in mobile applications

  • 1.
    Security testing inmobile applications José Manuel Ortega Candel
  • 2.
    About me  CentersTechnician at Everis  Computer engineer by Alicante University  Frontend and backend developer in Java/J2EE  Speaker site with some presentations in mobile and security https://speakerdeck.com/jmortega
  • 3.
    Index Security Testing forMobile Apps Risk Management & Security Threads Vulnerabilities & Mobile Security Risks Testing Components Security & Tools Security Test Plan & Best Practices
  • 4.
  • 5.
    Security Testing forMobile Apps White Box Testing Static Analysis Code Black Box Testing Dinamyc Analysis at Runtime
  • 6.
    Static Application SecurityTesting Source code Review Reverse engineering Lint for Android Studio Sonar Plugins for mobile http://www.sonarqube.org
  • 7.
  • 8.
    Static Application SecurityTesting https://github.com/SonarCommunity/sonar-android
  • 9.
    Static Application SecurityTesting http://sourceforge.net/projects/agnitiotool You can decompile APKs and search calls dangerous functions.
  • 10.
    Reverse engineering onAndroid APK Tool /Dex2jar/Java Decompiler
  • 11.
    Static analysis oniOS Xcode Development environment Apple Developer Tools ‘otool’ command provided by XCode can be used to get information from iOS application binaries and can be used to support security analysis.
  • 12.
    Static analysis oniOS Detect memory leaks with XCode Clang Static Analyzer http://clang-analyzer.llvm.org Flawfinder(Security weakness in C/C++) http://www.dwheeler.com/flawfinder
  • 13.
    Dynamic Application SecurityTesting Analyze Network Traffic at runtime Analyze Remote Services DroidBox for Android Instruments for iOS Discovering logical vulnerabilities
  • 14.
    Dynamic Application SecurityTesting  https://code.google.com/p/droidbox Monitoring Actions  Information leaks Network IO and File IO  Cryptography operations SMS and Phone calls
  • 15.
  • 16.
    Instruments for iOSapplications File Activity Monitoring Memory Monitoring Process Monitoring Network Monitoring
  • 17.
    Application Security Analyser pythonandrowarn.py -i my_apk.apk -r html -v 3 Telephony identifiers exfiltration: IMEI, IMSI, MCC, MNC, LAC, CID, operator's name... Device settings exfiltration: software version, usage statistics, system settings, logs... Geolocation information leakage: GPS/WiFi geolocation... Connection interfaces information exfiltration: WiFi credentials, Bluetooth MAC adress... Telephony services abuse: premium SMS sending, phone call composition... Audio/video flow interception: call recording, video capture... Remote connection establishment: socket open call, Bluetooth pairing, APN settings edit... PIM data leakage: contacts, calendar, SMS, mails... External memory operations: file access on SD card... PIM data modification: add/delete contacts, calendar events... Arbitrary code execution: native code using JNI, UNIX command, privilege escalation... Denial of Service: event notification deactivation, file deletion, process killing, virtual keyboard disable, terminal shutdown/reboot...
  • 18.
  • 19.
    Intelligence Gathering Environmental Analysis Architectural Analysis Analyze internal processesand structures App [network interfaces, used data, communication with other resources, session management] Runtime environment [MDM, jailbreak/rooting, OS version] Backend services [application server, databases]
  • 20.
    Intelligence Gathering What typeof device is it? Determine Operating System version Is the device already rooted? Is the device passcode enabled? What key applications are installed? Is the device connected to network?
  • 21.
    Thread model inMobile applications
  • 22.
    Functional Security threads Authentication Session Management AccessControl Input Validation Cryptography Error Handling and Logging Data Protection Communication Security
  • 23.
    Security issues Malicious Applications –Rooting Exploits – SMS Fraud – Rapid Malware Production Dynamic Analysis – Sandbox – Real-time Monitoring – Mobile Specific Features Static Analysis – Permissions – Data Flow – Control Flow Browser Attacks – Phishing – Click Through Mobile Botnets – Epidemic Spread – Attacking Network Services – Tracking Uninfected Devices User Education – Ignoring Permissions – Phishing – Improperly Rooting Devices – Alternative Markets
  • 24.
  • 25.
    Vulnerabilities 1. Activity monitoringand data retrieval 2. Unauthorized dialing, SMS, and payments 3. Unauthorized network connectivity (exfiltration or command & control) 4. UI Impersonation 5. System modification (rootkit, APN proxy config) 6. Logic or Time bomb 7. Sensitive data leakage (inadvertent or side channel) 8. Unsafe sensitive data storage 9. Unsafe sensitive data transmission 10. Hardcoded password/keys
  • 26.
    Vulnerabilities Analysis Static methods Dynamic methods Automaticand manual source code analysis Reverse Engineering Forensic methods Network monitoring and trafic analyzing Runtime analysis Log analysis File permission analysis File content analysis
  • 27.
    Dynamic methods tools Networkmonitoring and traffic analyzing Runtime analysis Wireshark, BurpSuite GNU debugger, Snoop-it, Cycript Mercury, Intent Sniffer, Intent Fuzzer File analysis androidAuditTools
  • 28.
    Testing vulnerabilities Data flow DataStorage Data leakage Authentication Authorization Server-side
  • 29.
    OWASP Mobile SecurityRisks Insecure Data Storage Transport Layer Protection, HTTP/SSL Authorization and Authentication Cryptography / Encrypting data Session handling Weak Server Side Controls in backend services Sensitive information [passwords,API keys,code ofuscation] Data Leakage [cache, logging, temp directories]
  • 30.
    Testing components security ContentProviders Data Storage WebViewServices NetWork Connections [HTTP / SSL] Certificates Data Encryption SQLite Shared Preferences File storage
  • 31.
    HTTPS and SSLcan protect against Man in the Middle attacks and prevent casual snooping
  • 32.
    Data Storage Encrypt data Neverstore user credentials Tools like SQLCipher for storing database in applications No global permissions granted to applications, using the principle of "least privilege".
  • 33.
    Secure Storage onAndroid The access permission of the created file was set to WORLD_READABLE / WORLD_WRITABLE Other app could read /write the file if the file path is known. Application data (private files) should be created with the access permission MODE_PRIVATE FileOutputStream fos = openFileOutput(“MyFile", Context.MODE_PRIVATE); fos.write(“contenido”.getBytes()); fos.close();
  • 34.
    Insecure Data onAndroid Look for file open operations using Context.MODE_WORLD_READABLE (translates to “1”)
  • 35.
    Secure Storage oniOS NSFileManager class NSFileProtectionKey attribute  NSFileProtectionNone – Always accessible  NSFileProtectionComplete – Encrypted on disk when device is locked or booting [[NSFileManager defaultManager] createFileAtPath:[self filePath] contents:[@"super secret file contents“ dataUsingEncoding:NSUTF8StringEncoding] attributes:[NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey]];
  • 36.
    DataBase Storage Support iOS/ Android https://www.zetetic.net/sqlcipher/open-source 256-bit AES Encrypt SQLite database Secure Preferences on Android https://github.com/scottyab/secure-preferences 3rd-party extensions
  • 37.
  • 38.
    Cryptography Android and iOSimplement standard crypto libraries such as AES algorithm try{ PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, PBE_ITERATION_COUNT, 256); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(PBE_ALGORITHM); SecretKey tmp = keyFactory.generateSecret(keySpec); // Encrypt SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES"); Cipher encryptionCipher = Cipher.getInstance(CIPHER_ALGORITHM); IvParameterSpec ivspec = new IvParameterSpec(initVector); encryptionCipher.init(Cipher.ENCRYPT_MODE, secret, ivspec); encryptedText = encryptionCipher.doFinal(cleartext.getBytes()); // Encode encrypted bytes to Base64 text to save in text file result = Base64.encodeToString(encryptedText, Base64.DEFAULT); } catch (Exception e) { e.printStackTrace() } Android provides the javax.crypto.spec.PBEKeySpec and javax.crypto.SecretKeyFactory classes to facilitate the generation of the password-based encryption key.
  • 39.
    Avoid Data Leackageon Android public static final boolean SHOW_LOG = BuildConfig.DEBUG; public static void d(final String tag, final String msg) { if (SHOW_LOG) Log.d(tag, msg); } Don't expose data through logcat on production -assumenosideeffects class android.util.Log { public static *** d(...); public static *** v(...); public static *** i(...); public static *** e(...); } Proguard configuration
  • 40.
    Permissions in mobileapps AndroidManifest.xml on Android  Try to minimize permissions <manifest package="com.example.android" …> <uses-permission android:name=“android.permission. ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> … </manifest>
  • 41.
    Permissions in mobileapps info.plist on iOS
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
    Security test plan Testcases Example Test Title /level Encryption /critical Test Description When connections are used encryption is used for sending / receiving sensitive data. Details and tools All sensitive information (personal data, credit card & banking information etc.) must be encrypted during transmission over any network or communication link. Expected result It has been declared that the Application uses encryption when communicating sensitive data.
  • 47.
    Security test plan Testcases Example Test Title /level Passwords /critical Test Description Passwords and sensitive data are not stored in the device and not echoed when entered into the App, sensitive data is always protected by password. Details and tools The objective of the test is to minimize the risk of access to sensitive information should the device be lost, by ensuring that no authentication data can be re-used by simply re-opening the application
  • 48.
    Security test plan Testcases Example Test Title /level Passwords /critical Expected result 1. Entering a password or other sensitive data will not leave it in clear text if completion of the fields is interrupted but not exited. 2. Passwords, credit card details, or other sensitive data do not remain in clear text in the fields where they were previously entered, when the application is reentered. 3. Sensitive personal data should always need entry of a password before it can be accessed.
  • 49.
    Best Practices Integrate securityin Continuous Integration (CI) process Apply encryption /decryption techniques used for sensitive data communication Detect areas in tested application that have more risks to detect vulnerabilities Install an automated security vulnerability scanner, integrated with your continuous integration tool
  • 51.
    Attacker vs Defenders DefendersAttackers Often have limited time to put defences in place Can take time to plan their attack Have limited opportunities to improve their defences Can invent new ways to attack Need to defend against a range of possible attacks Need only pick the most effective one Need to defend all entry points Can choose where to attack Has limited resources to defend Can be multiple attackers
  • 52.
  • 53.
    References https://github.com/secmobi/wiki.secmobi.com Tools IOS Application SecurityTesting https://www.owasp.org/index.php/IOS_Application_Security_ Testing_Cheat_Sheet
  • 54.
  • 55.