se2016 android denis zhuchinski "ways of enhancing application security"

83
Ways of Enhancing Application Security Denis Zhuchinski Android Developer EVO.company

Upload: inhacking

Post on 14-Apr-2017

82 views

Category:

Mobile


3 download

TRANSCRIPT

Page 1: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Ways of Enhancing Application Security

Denis Zhuchinski Android DeveloperEVO.company

Page 2: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Ways of Enhancing Application Security

Denis Zhuchinski Android DeveloperEVO.company

Page 3: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

What are we talking about today?

- Android & Security- Interprocess Communication- Networking- Data safety- Analyzing tools

Page 4: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Why should care about?

Page 5: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

What Android know about you?

- Calls- Messages- Emails- Contacts- Calendar- Location- Photos, Videos- Camera- ...

Page 6: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Enemies

- ADB- Malicious Apps- Unprotect Network- Sniffers

Page 7: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Android security model

Page 8: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Application sandboxing

Page 9: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Permissions

Page 10: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Inter Process Communication

Page 11: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Code Signing

Page 12: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

SELinux

Page 13: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Google’s Android Security Rewards has given researchers over $550,000 in 1 year

Page 14: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Interprocess Communication

“In the Android platform, the binder is used for nearly everything that happens across processes in the core platform."

– Dianne Hackborn

Page 15: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Binder

Page 16: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Interprocess Communication

- Intents- Content Providers- Messenger- System services (Telephone, Vibrator, Wifi,

Battery, Notification, etc.)- Lifecycle callbacks in your Activity like

onStart(),onResume(), onDestroy() are invoked by ActivityManagerServer via binders

Page 17: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Man in the Binder

Page 18: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Android IPC is not secure!

Page 19: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Networking

Page 20: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

HTTPS is a must have!

Page 21: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

But...

Page 22: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

HTTPS in not enough!

Page 23: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Man in the Middle

Page 24: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Pinning

- Certificate- Public key

RFC 5280

Page 25: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Certificate pinning

CertificateFactory cf = CertificateFactory.getInstance("X.509");

InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt"));

Certificate ca;

try {

ca = cf.generateCertificate(caInput);

System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());

} finally {

caInput.close();

}

OkHttpClient client = new OkHttpClient();

String certPin = CertificatePinner.pin(ca);

CertificatePinner certificatePinner = new CertificatePinner.Builder()

.add(API_HOST, certPin)

.build();

client.setCertificatePinner(certificatePinner);

Page 26: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

android.security.net.config

res/xml/network_security_config.xml:

<domain-config hstsEnforced=[True|False] cleartextTrafficPermitted=[True|False]>

<domain includeSubdomains=[True|False]>example.com</domain>

<pin-set expiration="exp-date">

<pin digest=sha256>PaJOmDNhWkVBvuXfzqXMyfo7kgtGpcyZp6L8EqvM8Ck=</pin>

</pin-set>

</domain-config>

Android N

Page 27: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Risks

- Insecure Data Storage - Weak Server Side Controls - Insufficient Transport Layer Protection - Client Side Injection - Poor Authorization and Authentication- Security Decisions Via Untrusted Inputs - Broken Cryptography

Page 28: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Where is the rescue, Bro?

Page 29: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Cryptography

Page 30: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Encryption Tools

- Cipher (javax.crypto)- Spongy Castle- Conceal- SQLCipher- AESCrypt-Android- Secure-preferences (https://github.com/scottyab/secure-preferences)- etc.

Page 31: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Conceal

Page 32: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Resources / Importance

- Secure key storage- Suitable algorithm- Right key length

Page 33: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

ONLINE ANALYZERS

1. AndroTotal2. Dexter3. Tracedroid4. Visual Threat5. Mobile Malware Sandbox6. MobiSec Eacus7. IBM Security AppScan Mobile Analyzer - not free8. NVISO ApkScan...

Page 34: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

STATIC ANALYSIS TOOLS

1. QUARK2. ApkAnalyser3. APKInspector4. Droid Intent Data Flow Analysis for Information

Leakage5. Drozer6. Several tools from PSU7. Smali CFG generator8. FlowDroid...

Page 35: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Apktool

$ apktool d app-test.apk

I: Using Apktool 2.2.0 on app-prod-release.apk

I: Loading resource table...

I: Decoding AndroidManifest.xml with resources...

I: Loading resource table from file: /home/oem/.local/share/apktool/framework/1.apk

I: Regular manifest package...

I: Decoding file-resources...

I: Decoding values */* XMLs...

I: Baksmaling classes.dex...

I: Copying assets and libs...

I: Copying unknown files...

I: Copying original files...

Page 37: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

QARK

Page 38: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

QARK

Page 39: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Drozer

adb install agent.apk

$ drozer console connect dz> run app.package.attacksurface com.app.test

dz> run app.package.attacksurface com.app.test

Attack Surface:

3 activities exported

0 broadcast receivers exported

2 content providers exported

2 services exported

is debuggable

Page 40: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Thing to remember

1. Never trust any input (use whitelists not blacklists)1. Store data securely4. Use HTTPS with certificate pinning5. Use Cryptography6. Don't write your own crypto2. Make code obfuscation7. Audit third-party code and services that you use3. Avoid excessive logging8. Perform security code review

Page 41: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Plan for security from the start - it's not something you can bolt on at the end

Page 42: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Links

1. https://www.androidpit.com/android-m-release-date-news-features-name#security

2. https://www.nowsecure.com/blog/2015/07/16/android-m-a-security-research-perspective-part-1/

3. https://koz.io/network-security-policy-configuration-for-android-apps/4. http://blog.riskfinder.co.jp/2016/03/network-security-configuration-android-n.

html5. http://markup.su/highlighter/6. https://www.securecoding.cert.org/confluence/display/android/Android+Sec

ure+Coding+Standard7. https://www.securecoding.cert.org/confluence/display/android/DRD06.+Do+

not+act+on+malicious+intents8. https://github.com/ashishb/android-security-awesome

Page 43: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

And That’s It…Thanks!

Questions? Comments?

Page 44: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

What are we talking about today?

- Android & Security- Interprocess Communication- Networking- Data safety- Analyzing tools

Page 45: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Why should care about?

Page 46: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

What Android know about you?

- Calls- Messages- Emails- Contacts- Calendar- Location- Photos, Videos- Camera- ...

Page 47: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Enemies

- ADB- Malicious Apps- Unprotect Network- Sniffers

Page 48: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Android security model

Page 49: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Application sandboxing

Page 50: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Permissions

Page 51: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Inter Process Communication

Page 52: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Code Signing

Page 53: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

SELinux

Page 54: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Google’s Android Security Rewards has given researchers over $550,000 in 1 year

Page 55: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Interprocess Communication

“In the Android platform, the binder is used for nearly everything that happens across processes in the core platform."

– Dianne Hackborn

Page 56: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Binder

Page 57: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Interprocess Communication

- Intents- Content Providers- Messenger- System services (Telephone, Vibrator, Wifi,

Battery, Notification, etc.)- Lifecycle callbacks in your Activity like

onStart(),onResume(), onDestroy() are invoked by ActivityManagerServer via binders

Page 58: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Man in the Binder

Page 59: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Android IPC is not secure!

Page 60: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Networking

Page 61: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

HTTPS is a must have!

Page 62: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

But...

Page 63: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

HTTPS in not enough!

Page 64: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Man in the Middle

Page 65: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Pinning

- Certificate- Public key

RFC 5280

Page 66: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Certificate pinning

CertificateFactory cf = CertificateFactory.getInstance("X.509");

InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt"));

Certificate ca;

try {

ca = cf.generateCertificate(caInput);

System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());

} finally {

caInput.close();

}

OkHttpClient client = new OkHttpClient();

String certPin = CertificatePinner.pin(ca);

CertificatePinner certificatePinner = new CertificatePinner.Builder()

.add(API_HOST, certPin)

.build();

client.setCertificatePinner(certificatePinner);

Page 67: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

android.security.net.config

res/xml/network_security_config.xml:

<domain-config hstsEnforced=[True|False] cleartextTrafficPermitted=[True|False]>

<domain includeSubdomains=[True|False]>example.com</domain>

<pin-set expiration="exp-date">

<pin digest=sha256>PaJOmDNhWkVBvuXfzqXMyfo7kgtGpcyZp6L8EqvM8Ck=</pin>

</pin-set>

</domain-config>

Android N

Page 68: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Where is the rescue, Bro?

Page 69: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Cryptography

Page 70: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Encryption Tools

- Cipher (javax.crypto)- Spongy Castle- Conceal- SQLCipher- AESCrypt-Android- Secure-preferences (https://github.com/scottyab/secure-preferences)- etc.

Page 71: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Conceal

Page 72: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Resources / Importance

- Secure key storage- Suitable algorithm- Right key length

Page 73: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

ONLINE ANALYZERS

1. AndroTotal2. Dexter3. Tracedroid4. Visual Threat5. Mobile Malware Sandbox6. MobiSec Eacus7. IBM Security AppScan Mobile Analyzer - not free8. NVISO ApkScan...

Page 74: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

STATIC ANALYSIS TOOLS

1. QUARK2. ApkAnalyser3. APKInspector4. Droid Intent Data Flow Analysis for Information

Leakage5. Drozer6. Several tools from PSU7. Smali CFG generator8. FlowDroid...

Page 75: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Apktool

$ apktool d app-test.apk

I: Using Apktool 2.2.0 on app-prod-release.apk

I: Loading resource table...

I: Decoding AndroidManifest.xml with resources...

I: Loading resource table from file: /home/oem/.local/share/apktool/framework/1.apk

I: Regular manifest package...

I: Decoding file-resources...

I: Decoding values */* XMLs...

I: Baksmaling classes.dex...

I: Copying assets and libs...

I: Copying unknown files...

I: Copying original files...

Page 77: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

QARK

Page 78: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

QARK

Page 79: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Drozer

adb install agent.apk

$ drozer console connect dz> run app.package.attacksurface com.app.test

dz> run app.package.attacksurface com.app.test

Attack Surface:

3 activities exported

0 broadcast receivers exported

2 content providers exported

2 services exported

is debuggable

Page 80: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Thing to remember

1. Never trust any input (use whitelists not blacklists)1. Store data securely4. Use HTTPS with certificate pinning5. Use Cryptography6. Don't write your own crypto2. Make code obfuscation7. Audit third-party code and services that you use3. Avoid excessive logging8. Perform security code review

Page 81: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Plan for security from the start - it's not something you can bolt on at the end

Page 82: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

Links

1. https://www.androidpit.com/android-m-release-date-news-features-name#security

2. https://www.nowsecure.com/blog/2015/07/16/android-m-a-security-research-perspective-part-1/

3. https://koz.io/network-security-policy-configuration-for-android-apps/4. http://blog.riskfinder.co.jp/2016/03/network-security-configuration-android-n.

html5. http://markup.su/highlighter/6. https://www.securecoding.cert.org/confluence/display/android/Android+Sec

ure+Coding+Standard7. https://www.securecoding.cert.org/confluence/display/android/DRD06.+Do+

not+act+on+malicious+intents8. https://github.com/ashishb/android-security-awesome

Page 83: SE2016 Android Denis Zhuchinski "Ways of enhancing application security"

And That’s It…Thanks!

Questions? Comments?