harvesting runtime values in android applications that
play

Harvesting Runtime Values in Android Applications That Feature - PowerPoint PPT Presentation

Harvesting Runtime Values in Android Applications That Feature Anti-Analysis Techniques Siegfried Rasthofer, Steven Arzt, Marc Miltenberger, Eric Bodden SECURE SOFTWARE ENGINEERING GROUP 2 This we would still hope for @Override


  1. Harvesting Runtime Values in Android Applications That Feature Anti-Analysis Techniques Siegfried Rasthofer, Steven Arzt, Marc Miltenberger, Eric Bodden SECURE SOFTWARE ENGINEERING GROUP

  2. 2

  3. This we would still hope for… @Override protected void onCreate(Bundle paramBundle) { SmsManager manager = SmsManager.getDefault(); manager.sendTextMessage("3353", null, "798657", null, null); } FakePlayer 2010 3

  4. But this is what we get… public static void gdadbjrj(String paramString1, String paramString2) throws Exception{ // Get class instance Class clz = Class.forName( gdadbjrj.gdadbjrj("VRIf3+In9a.aTA3RYnD1BcVRV]af") ); Object localObject = clz.getMethod( gdadbjrj.gdadbjrj("]a9maFVM.9")).invoke(null); // Get method name String s = gdadbjrj.gdadbjrj(“BaRIta*9caBBV]a"); // Build parameter list Class c = Class.forName( gdadbjrj.gdadbjrj("VRIf3+InVTTnSaRI+R]KR9aR9")); Class[] arr = new Class[] { nglpsq.cbhgc, nglpsq.cbhgc, nglpsq.cbhgc, c, c }; // Get method and invoke it clz.getMethod(s, arr).invoke(localObject, paramString1, null, paramString2, null, null); } SmsManager.sendTextMessage(...) 4

  5. Contributions C1: Fully-Automatic Extraction of Runtime Data C2: Fully-Automatic Resolving of Reflective Method Calls C2: Fully-Automatic Resolving of Reflective Method Calls C3: Improving the Coverage of Existing off-the-shelf Static and Dynamic Analysis Tools 
 5

  6. sendTextMessage(num, text) Class.forName(className) Harvester sendTextMessage(“004242“, “loc_Other“) sendTextMessage(“008888“, “loc_US“) Class.forName(“SmsManager“) 6

  7. if(Build.FINGERPRINT.startsWith("generic")) Dynamic msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Static Analysis? Analysis? nr ¡= ¡"00" if(simCountryIso().equals("US")) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 7

  8. Static Analysis + Dynamic Analysis 8

  9. if(Build.FINGERPRINT.startsWith("generic")) msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Environment nr ¡= ¡"00" if(simCountryIso().equals("US")) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 9

  10. if(Build.FINGERPRINT.startsWith("generic")) msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Environment nr ¡= ¡"00" if(simCountryIso().equals("US")) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 10

  11. if(Build.FINGERPRINT.startsWith("generic")) msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Environment nr ¡= ¡"00" if(simCountryIso().equals("US")) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 11

  12. x if(Build.FINGERPRINT.startsWith("generic")) msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Environment nr ¡= ¡"00" if(simCountryIso().equals("US")) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 12

  13. x if(Build.FINGERPRINT.startsWith("generic")) msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Environment nr ¡= ¡"00" if(simCountryIso().equals("US")) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 13

  14. x if(Build.FINGERPRINT.startsWith("generic")) msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Environment nr ¡= ¡"00" if(simCountryIso().equals("US")) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 14

  15. x if(Build.FINGERPRINT.startsWith("generic")) msg ¡= ¡AES.decrypt("1234","fri$ds\&S") Environment nr ¡= ¡"00" if(EXECUTOR_1) nr ¡+= ¡"4242" nr ¡+= ¡"8888" sendTextMessage(nr, ¡msg) ... 15

  16. Callee1(boolean ¡EXECUTOR_1) ¡{ main() ¡{ ¡ ¡ ¡Callee1(false); ¡ ¡ ¡Callee1(true); ¡ } msg ¡= ¡AES.decrypt("1234","fri$ds\&S") nr ¡= ¡"00" if(EXECUTOR_1) nr ¡+= ¡"4242" nr ¡+= ¡"8888" Log(nr, ¡msg) sendTextMessage(nr, ¡msg) } 16

  17. Harvester ++ Class c = Class.forName(gdadbjrj.gdadbjrj(„VRIf3+InVTTnSaRI+R]KR9aR9“)); ... Class c = Class.forName("SmsManager"); ... ... SmsManager SmsManager.sendTextMessage(a, b, c, d, e); 17

  18. Recall: 87% Efficiency: Precision: 100% < 3 minutes 16,799 Malware Samples Interesting findings: • Premium-rate numbers • C&C messages • URLs (URIs) • Encryption key for WhatsApp data • Backend-as-a-Service: 56 Million Sensitive User Data 18

  19. 19

  20. Siegfried Rasthofer TU Darmstadt/Fraunhofer SIT Email: siegfried.rasthofer@cased.de Blog: http://blogs.uni-paderborn.de/sse/ Twitter: @CodeInspect 20

Recommend


More recommend