Tu banca móvil, en forma simple y ¿segura? Estado de la seguridad en apps móviles bancarias

Post on 06-Apr-2017

383 views 0 download

Transcript of Tu banca móvil, en forma simple y ¿segura? Estado de la seguridad en apps móviles bancarias

Tu banca móvil, en forma simple y ¿segura?Estado de la seguridad en apps móviles bancarias

Cristián Rojas, CSSLPCLCERT Universidad de Chile

Jan Vašek - CC0

About: Cristián Rojas

● Ingeniero Civil en Computación, DCC-UCHILE

● Tesista, MSc-CS, DCC-UCHILE

● Múltiples funciones en INFOSEC:– Mercenario-Consigliere– Profesor-Instructor– Investigador (CLCERT-UCHILE)

● INFOSEC-Privacy-Kittehs-Beer Geek

¿ ?

¡Pruebe nuestra app!

¿Ya conoce las nuevas funciones de nuestra app?

Por casualidad ¿no le contamos que

tenemos una app?

¡Use nuestra app y gánese

un iPad!

¡Con nuestra app Usted podrá hacer sus operaciones en forma

fácil y segura!

Julián Zárate, “HTTP Break-header on GSM Networks”, 8.8 Security Conference 2014. Foto: Gabriel Franco.

¿Alguien es desarrollador de aplicaciones aquí?

Use nuestra app (…)en forma fácil y ¿segura?

¿Cuán segura?

¿Qué vulnerabilidades podría haber?

NowSecure, “The Anatomy of a Mobile Attack”

El aparato La red El centro de datos

La investigación

● Análisis de seguridad para apps de 9X 10 bancos disponibles en la Google Play Store (Android):– Ingeniería reversa de paquetes APK– Análisis estático manual y automatizado de tales

paquetes– Análisis pasivo de funcionamiento de apps

● Uso de proxy MITM (con capacidad HTTPS)● Revisión de área de almacenamiento de la app● Análisis de información enviada a logs● Simulación de recorrido geográfico para el GPS

¿Y por qué no iOS?

La investigación

● Ningún banco ha sido maltratado:– No hay pruebas sobre los servidores– Entrega (futura) de informe de vulnerabilidades

en forma privada a cada banco

Descubrimientos

Tipos de apps bancarias disponibles

Nativas Híbridas Embedded Web

I want your SK now, Mr. Anderson.

SHA1

RC4

Mal uso de cifrado en tránsito

$

No uso de cifrado en tránsito

GET http://www.mibanco.cl/srv/getUrls

{“url”: “https://www.mibanco.cl/newmobile”}

GET https://www.mibanco.cl/newmobile

MitM

https://www.mibanco.cl/mobile

http://www.webmalula.cl/websrvhttps://www.otrositio.cl/servicioTrucho

SecurePrefs(localCxt, "my-prefs", Util.getAndroidID).put("rut", str);

arrayOfByte1 = Tools.getIMEI().getBytes();arrayOfByte2 = "5425b62537c61".getBytes();arrayOfByte4 = Tools.getMD5(

arrayOfByte1 + arrayOfByte2);

Mal uso de cifrado en reposo

Abuso de permisos

● ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION

● WRITE_EXTERNAL_STORAGE● READ_LOGS● READ_CONTACTS● READ_PHONE_STATE

¡TODO O NADA!Modelo de permisos mejorado en

Android Marshmallow, pero...

Compartición de información con terceros

● Compartición con proveedores:– APM– Analytics

● ...de información:– Del teléfono– Personal (ej. RUT)

● Muchas apps no tienen política de privacidad asociada

Abuso de logging

Abuso de logging

● Otros datos enviados al log del aparato:– Información personal del usuario– Datos de destinatarios de transferencias– Cookies y ID's de sesión

– ¡PAN completo de tarjetas de crédito!– ¡¡¡PASSWORDS!!!

● Toda esta información es accesible por otras apps que pidan permiso android.permission.READ_LOGS

Y si el equipo está rooteado, mejor ni hablar...

Equipos rooteados

● Sandboxing: Cada app tiene un usuario UNIX dentro del sistema– Al rootear, eso se pierde – Y cualquier app con root

puede mirar archivos de la app, logs, etc.

● Algunas apps intentan alertar a los usuarios de aquello

● Principio de diseño abierto

A propósito: ¿Medidas Anti-RevEng?

Medidas Anti-RevEng

● Caso: Appcelerator Titanium● Encriptación de todos los archivos JS para

luego concatenarlos en un CharBuffer ● Luego se extrae y desencripta cada

archivo a discreción● ¿Y la llave de cifrado?● ¿Tomar medidas Anti-Ingeniería Reversa

hace más segura la app?

Grassi, Guerrero, “The nightmare behind the cross platform mobile apps dream”, BLACKHAT Asia 2015

Mal uso de cifrado en reposo II

tp = <password_usuario>key = Ti.Utils.md5HexDigest(Ti.Platform.id + Ti.App.id)

Alloy.Globals.encriptarClaveECB = function(tp, key) { var a = require("aes"), e = require("mode-ecb"), b64 = Ti.Utils.base64encode(key), key = a.CryptoJS.enc.Base64.parse(b64.toString()), tc = a.CryptoJS.AES.encrypt(tp, key, {mode: e.ECB}); return tc.toString();}

Android_ID ID de la app

Timeout no/mal implementado

● O no hay timeout por inactividad

● O está mal implementado– Muestra mensaje pero

con el contenido de fondo

● 62% de los usuarios no bloquea sus equipos*

* Elgeman, Jain, Portnoff, Liao, Consolvo, Wagner, “Are you ready to lock?”

Problemas heredados de la banca web

● Largo de passwords inadecuadamente restringido– Y quién sabe cómo las almacenan

● Centro de datos para app móvil ubicado en el mismo servidor de banca web

● Uso de tarjeta de coordenadas como segundo factor de autentificación (“clave 2”)

¿Por qué pasa todo esto?

Software

Seguridad

“Mad Max: Fury Road”, Warner Bros, 2015.

Blbliografía interesante

● Lineberry, Richardson, Wyatt, “These aren't the permissions you're looking for”, DEFCON 18

● Zerial, “Bancos en Chile: La precaria seguridad de la banca en linea”

● NowSecure, “42+ Best Practices for Secure iOS and Android Development”

Gracias… totales. ¿Preguntas?Contacto: crirojas@clcert.cl - @InjenieroBarsa

Jan Vašek - CC0