The Android security jungle: pitfalls, threats and survival tips - - PowerPoint PPT Presentation

the android security jungle
SMART_READER_LITE
LIVE PREVIEW

The Android security jungle: pitfalls, threats and survival tips - - PowerPoint PPT Presentation

The Android security jungle: pitfalls, threats and survival tips Scott Alexander-Bown @scottyab The Jungle Ecosystem Googles protection Threats Risks Survival Network Data protection (encryption) App/device


slide-1
SLIDE 1

The Android security jungle: pitfalls, threats and survival tips

Scott Alexander-Bown @scottyab

slide-2
SLIDE 2

The Jungle

  • Ecosystem
  • Google’s protection
  • Threats
  • Risks
slide-3
SLIDE 3
  • Network
  • Data protection (encryption)
  • App/device integrity
  • App binary security
  • Testing

Survival

slide-4
SLIDE 4
  • Lead Android Dev (remote) at Intohand
  • Co-Author - Android Security Cookbook
  • Co-Founder of SWmobile

Scott Alexander-Bown

slide-5
SLIDE 5

1.4 Billion users

slide-6
SLIDE 6

OpenSignals.com

slide-7
SLIDE 7
slide-8
SLIDE 8

Security Services

  • Google Play
  • Approval process (human approval since 2015)
  • Developer security notifications
  • Android Bouncer
  • Android device manager (Device security)
  • Safety net (intrusion detection)
  • Android at Work
slide-9
SLIDE 9

Slide Adrian Ludwig’s - Android Security State of the Union

slide-10
SLIDE 10

Newer version of Android are more secure

1.5 stack buffer, integer overflow protection 2.3+ null pointer dereference mitigation, NX 4.0+ ASLR 4.1+ ASLR strengthened 4.3 Security-Enhanced Linux 5.0 Security-Enhanced Linux - enforcing Updatabled Webview (via playstore)

slide-11
SLIDE 11

Threats

slide-12
SLIDE 12

Threats: App Hijacking

  • Taking an app and adding malware
  • Concerns
  • Reversing Android apps is easy
  • No need for certificate authority
  • Sideload
slide-13
SLIDE 13

“I ain’t got time to (heart)bleed”

slide-14
SLIDE 14
slide-15
SLIDE 15
slide-16
SLIDE 16

OWASP

  • Mobile Security Project
  • iOS and Android
  • Top 10 risks
  • attack vectors
  • threat agents
  • impacts
slide-17
SLIDE 17

OWASP top 10 risks

  • M1: Weak Server Side

Controls

  • M2: Insecure Data Storage
  • M3: Insufficient Transport

Layer Protection

  • M4: Unintended Data Leakage
  • M5: Poor Authorization and

Authentication

  • M6: Broken Cryptography
  • M7: Client Side Injection
  • M8: Security Decisions Via

Untrusted Inputs

  • M9: Improper Session Handling
  • M10: Lack of Binary Protections
slide-18
SLIDE 18

Survival kit

slide-19
SLIDE 19

Survival tips

  • 1. Harden the network communications
  • 2. Protect stored data (encryption)
  • 3. Validate the device and app integrity
  • 4. Increase binary security
slide-20
SLIDE 20

Network communications

  • Use SSL / TLS!
  • Use the platform SSL/TLS validation (i.e don’t disable it!)
  • Use only strong cipher suites (128bit+) and TLS versions (TLS v1.2)
  • OkHttp 2.1 - https://publicobject.com/2014/11/12/okhttp-2-1/
slide-21
SLIDE 21

Looks like you’re not using SSL pinning?

  • Devices ship with 100+ Certificate Authorities (CA) and

users can install their own

  • Pinning limits the trusted root CA’s
  • Two types
  • Certificate pinning
  • Public Key pinning
slide-22
SLIDE 22

Public key pinning

slide-23
SLIDE 23

Patch against SSL exploits

  • Google Play Services provides a dynamic security provider
  • ProviderInstaller.installIfNeeded(getContext());
  • https://developer.android.com/training/articles/security-gms-

provider.html#patching

slide-24
SLIDE 24

Tips

slide-25
SLIDE 25

Password based encryption

Code in a slide :’(

slide-26
SLIDE 26

Encryption libraries

  • Conceal
  • https://facebook.github.io/conceal
  • SQL cipher

https://www.zetetic.net/sqlcipher/sqlcipher-for-android/

  • Secure-Preferences (or Hawk)
  • https://github.com/scottyab/secure-preferences
slide-27
SLIDE 27

Hardcoded encryption key

slide-28
SLIDE 28

Verifying App integrity

  • Debuggable check
  • Apk Checksum
  • Signing certificate verification
slide-29
SLIDE 29

Signing Certificate Verification

Build-time Runtime

  • 1. Get you certificate signature

$keytool -list -v -keystore your_app.keystore

  • 2. Embed in app

String CERTIFICATE_SHA1 = “71920AC9486E087DCBCF5C7F6F…”;

  • 3. Get the Signature from the

PackageManager

  • 4. Hash the Signature
  • 5. Compare the signature hashes

strings

slide-30
SLIDE 30

Verifying device integrity

  • Emulator check
  • https://github.com/strazzere/a

nti-emulator

  • Google SafteyNet test
  • https://github.com/scottyab/sa

fetynethelper

slide-31
SLIDE 31

root@android:/ #

  • Root apps / Dangerous apps
  • Suspect system properties
  • SU/BusyBox binaries
  • RW /system
  • https://github.com/scottyab/rootbeer
slide-32
SLIDE 32

Obfuscation

slide-33
SLIDE 33

ProGuard

  • Java code obfuscator
  • Part of the Android SDK
  • Free as in Beer!
  • ReTrace - Supported by Error handling services such as Crashlytics
slide-34
SLIDE 34

DexGuard

  • Commercial version of ProGuard
  • Designed for Android and protection
  • Useful security utils - SSL Pinning, Root check, logging removal etc
  • My favourite features
  • String Encryption
  • API hiding
slide-35
SLIDE 35
slide-36
SLIDE 36

Quick Android Review Kit (Quak)

  • Python script
  • Works with .apk or source code
  • Automated tests
  • weaknesses
  • exploits
  • Creates exploit .apks
  • https://github.com/linkedin/qark
slide-37
SLIDE 37
slide-38
SLIDE 38

Click here for more!

  • 42+ Secure mobile development tips

http://bit.ly/viafor42

  • OWASP Mobile security risks

http://bit.ly/owaspmobile

  • Android security cookbook [book]

http://bit.ly/MscEFu

  • Android security internals [book]

http://bit.ly/andsecint

  • Droidsec (whitepapers)

droidsec.org/wiki

slide-39
SLIDE 39
slide-40
SLIDE 40
slide-41
SLIDE 41
  • @gotocph
  • @intohand
  • 20th Century Fox
  • Android security team

Thanks

slide-42
SLIDE 42

Questions?

dev@scottyab.com @scottyab github.com/scottyab Please Remember to rate this session Thank you

slide-43
SLIDE 43
slide-44
SLIDE 44
slide-45
SLIDE 45

WebView

  • Before
  • getSettings().setJavaScriptEnabled(false)
  • getSettings().setAllowFileAccess(false)
  • During
  • WebViewClient.shouldOverrideUrlLoading()
  • enforce local content or Https
  • Whitelisted hosts/urls
  • .shouldInterceptRequest() to intercept XmlHttpRequests
  • After
  • webview.clearCache(true)