android security development - part 1: app development

91
Android Security Development PART 1 – App Development SEAN

Upload: cheng-yi-yu

Post on 01-Dec-2014

1.407 views

Category:

Software


2 download

DESCRIPTION

Android Security Development Part 1: App Development How to create safe App ?

TRANSCRIPT

Page 1: Android Security Development - Part 1: App Development

Android Security Development

PART 1 – App Development

SEAN

Page 2: Android Security Development - Part 1: App Development

Sean

• Developer

[email protected]

• https://www.facebook.com/erinus

Page 3: Android Security Development - Part 1: App Development

Something you need to know• USB

• Screen

• Clipboard

• Permission

• Database

• Network

• Cryptography

• API Management

Page 4: Android Security Development - Part 1: App Development

Security about USB

Page 5: Android Security Development - Part 1: App Development

SAFE

ANDROID:ALLOWBACKUP = "FALSE"

Page 6: Android Security Development - Part 1: App Development

DANGEROUS

ANDROID:ALLOWBACKUP = "TRUE"

It will allow someone can backup databases and preferences.

Page 7: Android Security Development - Part 1: App Development

SAFE

ANDROID:DEBUGGABLE = "FALSE"

Page 8: Android Security Development - Part 1: App Development

DANGEROUS

ANDROID:DEBUGGABLE = "TRUE"

It will let someone can see log message and do something more …

Page 9: Android Security Development - Part 1: App Development

WHY ?

If you do not set android:debuggable="false", debug mode will depend on system setting.

Page 10: Android Security Development - Part 1: App Development

IF ERROR NOTIFICATION SHOWS IN ECLIPSE WHEN SET ANDROID:DEBUGGABLE, IT IS ALL

ABOUT ADT LINT.

Page 11: Android Security Development - Part 1: App Development

CLICK ON "PROBLEMS" TAB

Page 12: Android Security Development - Part 1: App Development

RIGHT CLICK ON ITEMAND CHOOSE "QUICK FIX"

Page 13: Android Security Development - Part 1: App Development

CHOOSE "DISABLE CHECK"

Page 14: Android Security Development - Part 1: App Development

Security about SCREEN

Page 15: Android Security Development - Part 1: App Development

GETWINDOW().SETFLAGS(LAYOUTPARAMS.FLAG_SECURE, LAYOUTPARAMS.FLAG_SECURE);

It disable all screen capture (except rooted device)

• [POWER] + [VOL-DWN]

• OEM feature like SAMSUNG / HTC

Page 16: Android Security Development - Part 1: App Development

Security about CLIPBOARD

Page 17: Android Security Development - Part 1: App Development

WHEN USER LEAVE APP

You want to clear clipboard

Page 18: Android Security Development - Part 1: App Development

YOU WANT TO ALLOW

User use something copied from other appsin your app

Page 19: Android Security Development - Part 1: App Development

ALSO WANT TO REJECT

User can not use something copied from your appin other apps

Page 20: Android Security Development - Part 1: App Development

FIRST

Page 21: Android Security Development - Part 1: App Development

SAVE THE STATE OF APPLICATION

onResume => FOREGROUNDonPause => BACKGROUND

Page 22: Android Security Development - Part 1: App Development

SECOND

Page 23: Android Security Development - Part 1: App Development

USE RUNNABLE AND POSTDELAYED 500 MS

When onPause is triggered, you can detectthe state of application after 500ms.

Page 24: Android Security Development - Part 1: App Development

LAST

Page 25: Android Security Development - Part 1: App Development

DETECT STATE AND SETPRIMARYCLIP

If STATE equals BACKGROUND, execute

BaseActivity.this.mClipboardManager

.setPrimaryClip(ClipData.newPlainText("", ""));

Page 26: Android Security Development - Part 1: App Development

THE TOP ITEM WILL BE EMPTYIN CLIPBOARD STACK

Android only let app access the top item in clipboard stack on non-rooted device.

Page 27: Android Security Development - Part 1: App Development

Security on PERMISSION

Page 28: Android Security Development - Part 1: App Development

ONLY USE NECESSARY PERMISSIONS

Page 29: Android Security Development - Part 1: App Development

IT IS COMMON SENSE

Page 30: Android Security Development - Part 1: App Development

BUT SOMETHING MORE

Page 31: Android Security Development - Part 1: App Development

GOOGLE CLOUD MESSAGINGNEEDS

ANDROID.PERMISSION.GET_ACCOUNTS

Page 32: Android Security Development - Part 1: App Development

BUT

Page 33: Android Security Development - Part 1: App Development

GOOGLE CLOUD MESSAGINGNEEDS

ANDROID.PERMISSION.GET_ACCOUNTS

Page 34: Android Security Development - Part 1: App Development

ONE YEAR LATER

Page 35: Android Security Development - Part 1: App Development

YOU SHOULD REMOVE "GET_ACCOUNTS"

When you do not support

Android 4.0.3 and older version

Page 36: Android Security Development - Part 1: App Development

Security on Database

Page 37: Android Security Development - Part 1: App Development

SQLITE

Page 38: Android Security Development - Part 1: App Development

RECOMMENDED

SQLCipher

Support iOS / Androidhttps://www.zetetic.net/sqlcipher/open-source

Page 39: Android Security Development - Part 1: App Development

SQLite Encryption Extensionhttp://www.sqlite.org/see/

Page 40: Android Security Development - Part 1: App Development

Security on NETWORK

Page 41: Android Security Development - Part 1: App Development

USE HTTPS WITH SELF-SIGNED CERTIFICATE

Page 42: Android Security Development - Part 1: App Development

BUT

Page 43: Android Security Development - Part 1: App Development

SOMETHING IGNORED ?

Page 44: Android Security Development - Part 1: App Development

DO YOU CHECK

HOSTNAME IS VALID ?

Page 45: Android Security Development - Part 1: App Development

VERIFY HOSTNAME

Page 46: Android Security Development - Part 1: App Development

DO YOU AVOID

IMPORTING MALICIOUS CERT ?

Page 47: Android Security Development - Part 1: App Development

CREATE BRAND NEW KEYSTORE

AND IMPORT SERVER CERT

Page 48: Android Security Development - Part 1: App Development

DOUBLE CHECK

THE BINARY CONTENT IFCERT ?

Page 49: Android Security Development - Part 1: App Development

VERIFY BINARY CONTENT OF SERVER CERT

Avoid Man-in-the-Middle attack

Page 50: Android Security Development - Part 1: App Development

WHY ?

Page 51: Android Security Development - Part 1: App Development

SSL MECHANISM IN OS MAY BE WRONG

APPLE SSL / TLS Bug ( CVE-2014-1266 )

Page 52: Android Security Development - Part 1: App Development

Chinese MITM Attack on iCloud

Page 53: Android Security Development - Part 1: App Development

SSL TUNNEL KEEP DATA SAFE ?

Page 54: Android Security Development - Part 1: App Development

NO

Page 55: Android Security Development - Part 1: App Development

YOU STILL NEED ENCRYPT DATA

Page 56: Android Security Development - Part 1: App Development
Page 57: Android Security Development - Part 1: App Development

DO NOT PUT KEY IN YOUR DATA

Page 58: Android Security Development - Part 1: App Development

Security on CRYPTOGRAPHY

Page 59: Android Security Development - Part 1: App Development

USE ANDROID SDK OR ANDROID NDK ?

Page 60: Android Security Development - Part 1: App Development

ANDROID SDK: JAVA

DECOMPILE EASYANALYSIS EASY

Page 61: Android Security Development - Part 1: App Development

ANDROID NDK: C AND C++

DISASSEMBLE EASYANALYSIS HARD

Page 62: Android Security Development - Part 1: App Development

ANDROID NDK

OpenSSL Inside

Page 63: Android Security Development - Part 1: App Development

ANDROID NDK

Can I customize ?

Page 64: Android Security Development - Part 1: App Development

ANDROID NDK

PolarSSLhttps://polarssl.org

Page 65: Android Security Development - Part 1: App Development

PolarSSL

You can change SBOX of AES, ...

Page 66: Android Security Development - Part 1: App Development

ALL KEY GENERATION AND ENCRYPTION

MUST BE DONE IN ANDROID NDK

Page 67: Android Security Development - Part 1: App Development

EVERYTHING IS DONE ?

Page 68: Android Security Development - Part 1: App Development

NO

Page 69: Android Security Development - Part 1: App Development

HOW TO GENERATE KEY ?

Page 70: Android Security Development - Part 1: App Development

RANDOMKEY

HARDWARE ID

USERKEY

Page 71: Android Security Development - Part 1: App Development

RANDOM KEY

One Key – One Encryption

Page 72: Android Security Development - Part 1: App Development

HARDWARE ID

IMEI / MEID

WIFI MAC Address

Bluetooth Address

Page 73: Android Security Development - Part 1: App Development

IMEI / MEID

ANDROID.PERMISSION.READ_PHONE_STATE

WIFI MAC Address

ANDROID.PERMISSION.ACCESS_WIFI_STATE

Bluetooth Address

ANDROID.PERMISSION.BLUETOOTH

Page 74: Android Security Development - Part 1: App Development

USER KEY

Input from user

Only exist in memory

Just clear when exit

Page 75: Android Security Development - Part 1: App Development

ONLY CIPHERTEXT ?

Page 76: Android Security Development - Part 1: App Development

SCRAMBLE YOUR CIPHERTEXT

WEP can be cracked by collecting large amount packet and analyzing ciphertext.

Page 77: Android Security Development - Part 1: App Development

SCRAMBLED CIPHERTEXT

CIPHERTEXT

Page 78: Android Security Development - Part 1: App Development

HOW TO SCRAMBLE ?

Page 79: Android Security Development - Part 1: App Development

MORE COMPLEX THAN BASE64

WIKI: Common Scrambling Algorithmhttp://goo.gl/eP6lXj

Page 80: Android Security Development - Part 1: App Development

IF ALL KEY LOST ?

Page 81: Android Security Development - Part 1: App Development

SORRY

Page 82: Android Security Development - Part 1: App Development

GOD BLESS YOU

Page 83: Android Security Development - Part 1: App Development

API MANAGEMENT

Page 84: Android Security Development - Part 1: App Development

ACCESS TOKEN

REFRESH PERIODICALLY

RANDOM GENERATE

Page 85: Android Security Development - Part 1: App Development

HOW TO USE ACCESS TOKEN ?

Page 86: Android Security Development - Part 1: App Development

ACCESS TOKEN

USER ID

Page 87: Android Security Development - Part 1: App Development

ACCESS TOKEN

USER ID

HARDWARE ID

Page 88: Android Security Development - Part 1: App Development

ACCESS TOKEN

USER ID

HARDWARE ID↓

ENCRYPT OR DECRYPT

Page 89: Android Security Development - Part 1: App Development

ALL API ACCESS MUST USE ACCESS TOKEN

Page 90: Android Security Development - Part 1: App Development

Next Part

Page 91: Android Security Development - Part 1: App Development

Malicious Android AppDynamic Analyzing System