11 noviembre 2014

Alterando la ejecución de aplicaciones Android con Substrate

Siguiendo con la idea del artículo anterior, Evadiendo implementaciones de certificate pinning, vamos a ver otra forma de resolver el mismo problema: utilizar la API de Cydia Substrate la cual nos permitirá hacer hooking y alterar la ejecución de las aplicaciones en memoria sin necesidad de modificar el código original de la aplicación que queremos analizar.

Los ingredientes

Para aplicar esta técnica de análisis de aplicaciones vamos a necesitar:
  1. Un dispositivo rooteado, nos vale una máquina virtual
  2. Instalar en el dispositivo la aplicación Cydia Substrate
  3. Tener configurado un entorno de desarrollo Android (vamos a implementar una extensión Substrate para alterar la ejecución de las aplicaciones)
  4. Descargar el SDK de Android Substrate
  5. Proxydroid instalado en el dispositivo + Máquina con Web proxy donde redirigir el tráfico (en mi caso Burp) + Certificado Burp instalado en dispositivo

Y para que podamos apreciar mejor la diferencia entre desensamblar + alterar el código + re-empaquetar y alterar el código en memoria con Substrate, vamos a realizar las pruebas sobre la misma app: eTools Private Search, de modo que si ya la teníamos instalada y alterada por la anterior prueba es el momento de reinstalarla desde Google Play.

El paso a paso

Antes de entrar en materia recordemos que en el artículo evadimos la implementación del certificate pinning (de aquí en adelante CP para abreviar) anulando el paso del array TrustManager, el cual contenía la clave pública del servicio que se quería certificar:
Figura 1

Utilizando esta técnica de hooking lo que vamos a hacer es añadir un hook sobre la clase y método de la que queremos alterar el comportamiento para, una vez obtenido el flujo de ejecución de la aplicación, ajustarlo a nuestra necesidad.

Y dicho lo anterior, se nos plantean dos posibilidades:
a) Podemos hacer un hook a nivel de la app sobre el método mostrado en la Figura 1 para reescribir todo su comportamiento. Lo que haríamos sería no crear el array TrustManager que contiene la clave pública del certificado y que así el objeto SSLContext no lo tenga en cuenta y nos admita el certificado de nuestro Web proxy.
b) Podemos hacer un hook a nivel de la API de Android sobre el método init de la clase SSLContext, de modo que cuando la app haga la llamada a esa función nosotros capturemos esa ejecución. Una vez con el control podemos delegar la ejecución al método init original, pero pasando un argumento nulo donde se esperaba el array TrustManager con la clave pública fijada.

Vamos a elegir la opción b) ya que como veréis más adelante incluirá una grata sorpresa al modificar el comportamiento a nivel de la API de Android.


Ya con la estrategia definida nos ponemos manos a la obra, vamos a crear una extensión Substrate y a cargarla en nuestro dispositivo de análisis para alterar la ejecución en memoria y evadir el mecanismo de seguridad de CP:

1. Creamos un proyecto Android, en mi caso usaré Android Studio aunque podemos usar cualquier IDE que nos permita desarrollar para Android:

Figura 2
Y agregamos en el proyecto la librería de Substrate que hemos descargado en el punto 4 del apartado anterior:

Figura 3

2. Creamos el código de la extensión para modificar el comportamiento del método init de la clase SSLContext, para ello creamos una clase a la que llamamos por ejemplo BypassCertificatePinning con el siguiente contenido:

Figura 4

En el fragmento de código anterior hacemos lo siguiente:
  • Utilizando la función MS.hookClassLoad(...) de la API de Substrate establecemos un hook sobre la clase SSLContext de modo que cuando se creen objetos de ese tipo se ejecute el código contenido en classLoaded(...)
  • Cuando se detecte la creación de objetos SSLContext se ejecutará nuestro código, que utilizando reflection nos permitirá acceder al método init que vamos a alterar
  • Utilizando la función MS.hookMethod(...) de la API de Substrate definiremos el nuevo comportamiento a realizar por el método init:
Figura 5
Entrando en más detalle sobre el código de la Figura 5 lo que he hecho ha sido alterar su comportamiento para pasar la llamada al método init original ( usando invoke(...) )con una diferencia sustancial: anular el segundo parámetro (que es el que contiene el array TrustManager con las claves públicas que harán el CP).

3. Ajustamos el manifiesto de la aplicación preparándolo para la ejecución de la extensión que vamos a desarrollar:

Figura 6
4. Instalamos la aplicación en el dispositivo y si todo ha ido bien veremos como recibimos una notificación de que se ha detectado una nueva extensión de Substrate:

Figura 7
Ahora debemos reiniciar el dispositivo para que la extensión tenga efecto, lo podemos hacer desde el botón Restart System (Soft) que se mostrará en la app de Substrate al hacer click en la notificación, este reinicio será bastante rápido:

Figura 8

5. Ya estamos preparados, redirigimos el tráfico HTTP/S al web proxy y ejecutamos la aplicación. Si revisamos los logs del sistema veremos las trazas que he dejado en el código:

Figura 9

Finalmente podemos ver el tráfico en nuestro Web proxy y confirmar la evasión del CP:

Figura 10

Bonus track

Otra ejemplo de implementación de CP como mecanismo de seguridad lo podemos encontrar en la app de Twitter, que si probáis a re-empaquetar con el método que comentaba en el artículo anterior veréis que incluso sin modificar código la aplicación falla al iniciarse.

Sin embargo, con el paso a paso que hemos descrito en el punto anterior y sin necesidad de hacer nada más ya estaremos evadiendo su implementación de CP:

Figura 11

Conclusiones


Como veis se trata de un método bastante inocuo ya que no alteramos la aplicación en sí sino su ejecución en memoria.

Nos ofrece muchísimo potencial ya que tras un análisis previo del código de la aplicación podemos alterar tanto las funciones de la propia aplicación como de la API de Android para tener un control todavía mayor, lo cual nos depurar y alterar la ejecución mientras que pasamos desapercibidos a determinadas validaciones como puede ser la verificación de firma de la propia app, comprobación de hash de ficheros del APK, aapt modificados para complicar el proceso de re-empaquetado, etc.

Artículo cortesía de Miguel Ángel García

14 comments :

james pack dijo...

Hola a todos en este sitio, yo soy de España y quiero felicitar a los esfuerzos jamespackloanfirm@gmail.com que necesitaba un préstamo para comprar un coche y pagar el alquiler de mi casa y necesito un préstamo de € 35.000, para comunicarse con ellos y hoy tengo un préstamo en mi cuenta bancaria, por lo que quiero que todos ustedes ponerse en contacto con ellos y dejar el contacto ningún otro prestamista de préstamo, un grupo global de empresas es un préstamo legítimo así que póngase en contacto con ellos ahora jamespackloanfirm@gmail.com

ricardo martin rodriguez dijo...

Muy buen artículo, me ha
gustado mucho, se ve que te llama bastante todo lo que tenga que ver con
Android, continua así, muy buenos posts.

Meryl Daniels dijo...

Empresarios siempre están buscando maneras de hacer más dinero y ayudar a crecer su negocio! Una forma es conseguir fondos adicionales para una variedad de razones ... más inventario, la contratación de nuevos empleados, la expansión ... y mucho más

Somos una organización cristiana formada para ayudar a las personas en necesidad de asistencia financiera. Así que si usted está pasando por dificultades financieras y necesita los fondos para poner en marcha su propio negocio, o necesita préstamo para liquidar su deuda o pagar sus cuentas, iniciar un buen negocio, o tal vez usted está encontrando difícil obtener préstamos de capital de bancos locales, no busques más que su historia cambia esta segunda. Damos préstamos a una tasa de interés barato y asequible de 2%, con un plan de pago que se adapte a su ingreso a la perfección. ponerse en contacto hoy, porque la Biblia dice: "Lucas 11:10

Todo el que pide, recibe; el que busca, halla; y al que llama, la puerta se abrirá "así que no dejes estos oportunidad pase de largo porque Jesús es el mismo ayer, hoy y siempre. Por favor, esto es para graves mentalidad y gente temerosa de Dios.

Contacto: greatfuturefinancialservices@gmail.com

James Harry dijo...

¡Hurra! Hurra !! ¡Hurra !!!
Es hora época del año otra vez cuando hay celebraciones en todas partes. Es el período de Navidad y Año Nuevo.
James Harry Préstamo Firm está aquí de nuevo para ayudarle con sus necesidades financieras. prisa ahora y solicitar su préstamo sueño ya que tenemos una promo en bonanza y va para el final del año y las celebraciones de Navidad.
¿Necesita un préstamo urgente? ¿Necesita un préstamo para pagar sus deudas? ¿Necesita un préstamo para probablemente ampliar su negocio o iniciar su propio negocio, entonces estamos aquí para usted con un préstamo de tasa de interés baja un precio tan bajo como el 3% y se puede obtener un préstamo de $ 1,000 a $ 100.000.000,00 y una duración máxima del préstamo de hasta 50 años .So en contacto con nosotros ahora.
Correo electrónico: jamesharryloanfirm@yahoo.com
Sitio Web: www.jamesharryloanfirm.webs.com

Rogger Ortega dijo...

Gracias por compartirlo, muy buenos datos.

Beto Alenjradro dijo...

Eres un hombre o mujer de negocios? ¿Necesita préstamo para liquidar su deuda o pagar sus facturas o iniciar un proyecto intensivo de capital?
¿Tiene un bajo puntaje de crédito y usted está encontrando dificultades para obtener préstamos de capital de los bancos / otros institutos financieros locales? que damos préstamo en el mínimo de 3000 hasta el máximo de 10,000,0000 y también en la duración de 6 meses a 30 años. ¿Necesita un préstamo o la financiación por cualquier motivo, tales como:
a) Préstamo Personal, expansión de negocios,
b) Creación de Empresas, Educación,
c) Consolidación de Deuda,
d) Prestamo Hipoteca
E) Mejoras para el hogar
F) Préstamos Inventor
I) Préstamos de Auto
G) Matrimonio Hipoteca
H) préstamo de Navidad
Ofrecemos préstamos a tasa de interés moderada con garantía y no garantía, ofrecemos préstamos personales, préstamos de consolidación de deuda, capital riesgo, préstamos comerciales, préstamos educativos, préstamos hipotecarios o préstamos "por ningún motivo!"
Todos los candidatos interesados ?? deben ponerse en contacto con nosotros a través de nuestro correo electrónico ( jorgedominguezfinancieragencia@yandex.com )o para obtener más información sobre cómo obtener la mejor operación financiera

Jorge Domiguez dijo...

Eres un hombre o mujer de negocios? ¿Necesita préstamo para liquidar su deuda o pagar sus facturas o iniciar un proyecto intensivo de capital?
¿Tiene un bajo puntaje de crédito y usted está encontrando dificultades para obtener préstamos de capital de los bancos / otros institutos financieros locales? que damos préstamo en el mínimo de 3000 hasta el máximo de 10,000,0000 y también en la duración de 6 meses a 30 años. ¿Necesita un préstamo o la financiación por cualquier motivo, tales como:
a) Préstamo Personal, expansión de negocios,
b) Creación de Empresas, Educación,
c) Consolidación de Deuda,
d) Prestamo Hipoteca
E) Mejoras para el hogar
F) Préstamos Inventor
I) Préstamos de Auto
G) Matrimonio Hipoteca
H) préstamo de Navidad
Ofrecemos préstamos a tasa de interés moderada con garantía y no garantía, ofrecemos préstamos personales, préstamos de consolidación de deuda, capital riesgo, préstamos comerciales, préstamos educativos, préstamos hipotecarios o préstamos "por ningún motivo!"
Todos los candidatos interesados ?? deben ponerse en contacto con nosotros a través de nuestro correo electrónico ( jorgedominguezfinancieragencia@yandex.com )o para obtener más información sobre cómo obtener la mejor operación financiera

Alvin Scott dijo...

Are you in any kind of financial difficulties? Do you need a loan for
debt consolidation, construction, real estate loan, refinance, personal
business purpose or emergency money? Are you a business man or
women who are planning to expand his or her business, we offer loan of all kinds. if interested contact us today via alvinscott12@outlook.com with the information below.


FULL NAME:
COUNTRY:
LOAN AMOUNT NEEDED:
LOAN DURATION:
MONTHLY INCOME:
PHONE NUMBER:
Thanks,


Mr Alvin

Alvin Scott dijo...

¿Está usted en cualquier tipo de dificultades financieras? ¿Necesita un préstamo para
consolidación de la deuda, la construcción, préstamos de bienes raíces, refinanciar, personal
objetivo comercial o dinero de emergencia? ¿Es usted un hombre de negocios o
las mujeres que están pensando en ampliar su negocio, ofrecemos préstamos de todo tipo. si está interesado en contacto con nosotros hoy a través de alvinscott12@outlook.com con la siguiente información.


Nombre completo:
PAÍS:
MONTO DEL PRÉSTAMO SE NECESITA:
Duración del préstamo:
INGRESO MENSUAL:
Número de teléfono:
Gracias,


Sr. Alvin

Credit Solution Company dijo...

Hola querida

Si usted está cansado de Préstamos e Hipotecas bancos y otras instituciones financieras están buscando, o han sido rechazadas constantemente por esquema de micro-finanzas. Este es el mínimo mensual de $ 1,000.00 a $ 10,000,000.00 tasa de interés máxima que oscila entre el 3% de crédito Deliver es para informarles que con 100% de garantía. Damos créditos para mejorar el negocio. a / expansión de los negocios una ventaja competitiva. Estamos certificados de confianza, fiable, eficiente, dinámico rápido y asegúrese de descansar. La cooperación es el financiero de bienes raíces y todos los tipos de financiación, tenemos un préstamo a largo plazo por lo menos de uno a veinte años, y para dar a todos el interés y permitimos a calcular y pagar anualmente. Tenemos los siguientes tipos de préstamos que se ofrecen y
muchos más;

* Préstamos Personales (sin garantía de préstamo)
* Préstamos Comerciales (préstamo sin garantía)
* Préstamo de Consolidación
* Préstamo de combinación
* Promoción de Obra

Para buscar e-mail puntos de contacto
Dirección de correo electrónico: creditsolutioncompany@gmail.com

luis carlus dijo...

AVISO PÚBLICO
¿Necesita un préstamo? Si es así, somos el prestamista de préstamo legítimas y garantía. Somos una empresa que da asistencia financiera. Prestamos dinero a personas que necesitan asistencia financiera, que tienen un mal crédito o que necesitan dinero para pagar las facturas, para invertir en el negocio. Quiero utilizar este medio para informarle que prestamos asistencia fiable beneficiaria como yo gusto te dará una oferta de préstamo. Servicios incluyen préstamo de consolidación de deuda crédito automotriz préstamos comerciales Préstamos Personales.Aplly si usted está interested.the la tasa de interés es del 2%. Sr Luis Carlos
Correo electrónico. diamond_fin@outlook.com

Welfare Finance dijo...

Bueno Cliente Día,

En nombre de esta organización Bienestar Finanzas queremos certificar que se trata de una compañía de licencia de préstamo, estamos certificados compañía de préstamos, así como un inversionista ángel hemos estado en este préstamos comerciales como Ángel y tenemos una buena cabeza para los necesitados no robar .

Estamos al servicio de nuestros clientes, ayudamos a los pobres Este préstamo viene de la Finanzas Ayuda Bienestar (Common Wealth) En mis préstamos del programa, las tasas de interés son bajas, pero en el corto plazo de efectivo, Interés necesaria para el préstamo es del 2% con una duración de no más de 360 meses (52 años), pero puede ser menos.

La duración mínima para este préstamo es 24 meses, que es de 2 años, en estos 24 meses se espera que el prestatario para hacer pagos de préstamos que hace que sea aún más fácil de pagar. Email: welfarefinancehelp@hotmail.com para contestar, me envía su número de teléfono,

estamos a la espera de su respuesta lo antes posible. Para cualquier consulta, no dude en preguntar.

atentamente

Javier dijo...

Gran articulo, que crack ;)

Francesc Llort dijo...

Imperativo plural del verbo tener = tened, Infinitivo = tener. Hay que
estar más atento en clase de lengua castellana, jainko, Y no darle la bulla a los
demás porque tu no sepas.