KEMBAR78
2015.04.24 Updated > Android Security Development - Part 1: App Development | PDF
Android Security
Development
PART 1 – App Development
SEAN
Sean
• Developer
• erinus.startup@gmail.com
• https://www.facebook.com/erinus
Something you need to know
• USB
• Screen
• Clipboard
• Permission
• Database
• Network
• Cryptography
• API Management
• Validation
Security about USB
SAFE
ANDROID:ALLOWBACKUP = "FALSE"
DANGEROUS
ANDROID:ALLOWBACKUP = "TRUE"
It will allow someone can backup databases and
preferences.
SAFE
ANDROID:DEBUGGABLE = "FALSE"
DANGEROUS
ANDROID:DEBUGGABLE = "TRUE"
It will let someone can see logcat messages and do
something more …
WHY ?
If you do not set android:debuggable="false",
debug mode will depend on system settings.
IF ERROR NOTIFICATION SHOWS IN ECLIPSE
WHEN SET ANDROID:DEBUGGABLE, IT IS ALL
ABOUT ADT LINT.
CLICK ON "PROBLEMS" TAB
RIGHT CLICK ON ITEM
AND CHOOSE "QUICK FIX"
CHOOSE "DISABLE CHECK"
Security about SCREEN
GETWINDOW().SETFLAGS(LAYOUTPARAMS.FL
AG_SECURE, LAYOUTPARAMS.FLAG_SECURE);
It disable all screen capture (except rooted device)
• [POWER] + [VOL-DWN]
• OEM feature like SAMSUNG / HTC
Security about CLIPBOARD
WHEN USER LEAVE APP
You want to clear clipboard
YOU WANT TO ALLOW
User can use something copied from other apps
in your app
ALSO WANT TO REJECT
User can not use something copied from your app
in other apps
FIRST
SAVE THE STATE OF APPLICATION
onResume => FOREGROUND
onPause => BACKGROUND
SECOND
USE RUNNABLE AND POSTDELAYED 500 MS
When onPause is triggered, you can detect
the state of application after ~500ms.
LAST
DETECT STATE AND SETPRIMARYCLIP
If STATE equals BACKGROUND, executes
BaseActivity.this.mClipboardManager
.setPrimaryClip(ClipData.newPlainText("", ""));
THE TOP ITEM WILL BE EMPTY
IN CLIPBOARD STACK
Android only lets app access the top item in
clipboard stack on non-rooted device.
Security on PERMISSION
ONLY USE NECESSARY PERMISSIONS
IT IS COMMON SENSE
BUT SOMETHING MORE
GOOGLE CLOUD MESSAGING
NEEDS
ANDROID.PERMISSION.GET_ACCOUNTS
BUT
GOOGLE CLOUD MESSAGING
NEEDS
ANDROID.PERMISSION.GET_ACCOUNTS
ONE YEAR LATER
YOU SHOULD REMOVE "GET_ACCOUNTS"
When you do not support
Android 4.0.3 and older version
Security on Database
SQLITE
RECOMMENDED
SQLCipher
Support iOS / Android
https://www.zetetic.net/sqlcipher/open-source
SQLite Encryption Extension
http://www.sqlite.org/see/
Security on NETWORK
USE HTTPS WITH SELF-SIGNED CERTIFICATE
BUT
SOMETHING IGNORED ?
DO YOU CHECK
HOSTNAME IS VALID ?
VERIFY HOSTNAME
DO YOU AVOID
IMPORTING MALICIOUS CERT ?
CREATE BRAND NEW KEYSTORE
AND IMPORT SERVER CERT
DOUBLE CHECK
THE BINARY CONTENT OF CERT ?
VERIFY BINARY CONTENT OF SERVER CERT
Avoid Man-in-the-Middle attack
WHY ?
SSL MECHANISM IN OS MAY BE WRONG
APPLE SSL / TLS Bug ( CVE-2014-1266 )
Chinese MITM Attack on iCloud
POODLE Bites
Lenovo Superfish
FREAK
SSL TUNNEL KEEP DATA SAFE ?
NO
YOU STILL NEED ENCRYPT DATA
HTTPS WEB PROXY
DO NOT PUT KEY IN YOUR DATA
Security on CRYPTOGRAPHY
USE ANDROID SDK OR ANDROID NDK ?
ANDROID SDK: JAVA
DECOMPILE EASY
ANALYSIS EASY
ANDROID NDK: C AND C++
DISASSEMBLE EASY
ANALYSIS HARD
ANDROID NDK
OpenSSL Inside
ANDROID NDK
Can I customize ?
ANDROID NDK
PolarSSL
https://polarssl.org
PolarSSL
You can change SBOX of AES, ...
AES
AES-256 / CBC / PKCS7Padding
RSA
RSA-4096
ALL KEY GENERATION AND ENCRYPTION
MUST BE DONE IN ANDROID NDK
EVERYTHING IS DONE ?
NO
HOW TO GENERATE KEY ?
RANDOM
KEY
HARDWARE
ID
USER
KEY
RANDOM KEY
One Key – One Encryption
HARDWARE ID
IMEI / MEID
WIFI MAC Address
Bluetooth Address
IMEI / MEID
ANDROID.PERMISSION.READ_PHONE_STATE
WIFI MAC Address
ANDROID.PERMISSION.ACCESS_WIFI_STATE
Bluetooth Address
ANDROID.PERMISSION.BLUETOOTH
USER KEY
Input from user
Only exist in memory
Just clear when exit
ONLY CIPHERTEXT ?
SCRAMBLE YOUR CIPHERTEXT
WEP can be cracked by collecting large amount
packet and analyzing ciphertext.
SCRAMBLED CIPHERTEXT
CIPHERTEXT
HOW TO SCRAMBLE ?
MORE COMPLEX THAN BASE64
WIKI: Common Scrambling Algorithm
http://goo.gl/eP6lXj
IF ALL KEY LOST ?
SORRY
GOD BLESS YOU
Security on API MANAGEMENT
ACCESS TOKEN
REFRESH PERIODICALLY
RANDOM GENERATE
HOW TO USE ACCESS TOKEN ?
ACCESS TOKEN
↓
USER ID
ACCESS TOKEN
↓
USER ID
↓
HARDWARE ID
ACCESS TOKEN
↓
USER ID
↓
HARDWARE ID
↓
ENCRYPT OR DECRYPT
ALL API ACCESS MUST USE ACCESS TOKEN
Security on VALIDATION
PASSWORD
HASH Algorithms
MD5
Not Secure
SHA-1
Almost Secure
SHA-256
Secure
Suggestion
MD5(SHA-1(Password + Salt))
+
SHA-256(SHA-1(Password + Salt))
Next Part
Malicious Android App
Dynamic Analyzing System

2015.04.24 Updated > Android Security Development - Part 1: App Development