tu banca móvil, en forma simple y ¿segura? estado de la seguridad en apps móviles bancarias
TRANSCRIPT
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: [email protected] - @InjenieroBarsa
Jan Vašek - CC0