+ All Categories
Home > Technology > Csa Summit 2017 - Obteniendo información de tu organización a través de aplicaciones móviles

Csa Summit 2017 - Obteniendo información de tu organización a través de aplicaciones móviles

Date post: 21-Jan-2018
Category:
Upload: csa-argentina
View: 125 times
Download: 3 times
Share this document with a friend
33
Transcript

Juan Urbano Stordeur

Security Consultant

Mobile Security Testing Guide (MSTG)Mobile Application Security Verification Standard (MASVS)OWASP Mobile Top Ten 2016/2014

3

URL EXTERNA POR UNA PLICACIÓN DE TERCERO POR MEDIO DE DISPOSITIVO CON ROOT

¿De qué manera podemos obtener una aplicación?

5

¡Perfecto! ¿Pero como empieza un cybercriminal a recolectar información?

1. Análisis estático2. Análisis de transferencia de información3. Información almacenada en el dispositivo

6

Podríamos definir tres enfoques de análisis

Análisis estático

Diversas herramientas:

JadxProcyoncfrjd-gui, etc

7

Comparamos con Meld

8

Enfoque pasivo/activo.Principalmente MITM a la aplicación (CA, Bypass Certificate Pinning, etc).

9

Análisis de transferencia de información

Bypassing SSL Pinning

Cydia Substrate y Android-SSL-TrustKiller - Dos APK que se instalan en el dispositivo para evadir Certificate Pinning (solo en Kitkat v4.4)Xposed Framework y JustTrustMe – Igual que las anteriores, pero mas fáciles implementar y corren en Lollipop+.

10

Almacenamiento Externo.

Almacenamiento Interno.SQLiteShared Preferences

11

Información almacenada en el dispositivo

Algunos ejemplos de auditorias realizadas…

12

CASO 1: Archivos assets

13

URL’s almacenadas en xml IP’s publicas y privadas Puertos y servicios Direccionamiento interno, etc.

SSH, FTP, SFTP, HTTP/HTTPS en puertos fuerade lo común, etc.

14

CASO 2: Servicios y puertos expuestos

CASO 3: Información almacenada de manera insegura

15

SQLite & SharedPreferences

CASO 4: Brute Force SMS

16

CASO 5: SQL Injection

17

¿Cuál sería el impacto entonces?

18

¿Cuales serían las recomendaciones?

19

20

Algunas Protecciones Binarias

Lexical ObfuscationAnti-TamperingAnti-DebuggingAnti-EmulationRoot Check

SQLite & Shared Preferences encryptedCA Validation & Certificate Pinning

21

package artificialDriving {public class Navigator{}}package connectionHandler {public class BluetoothHandler{}}package userInterface {public class {}}

package a {public class a{

public void a(){}public void(int a){}}

public class b{public void a(){}public void a(int a){}}

Lexical Obfuscation

public final class CcoCIcI{

private static final byte[] COcocOlo;

private static boolean CcoCIcI;

private static BluetoothAdapter IoOoOIOI;

}

package 你{

public class 音{

public void 你() {}

public void 你(int ){}

}

}

22

Random/Non-alpha Identifier name

Anti-Tampering

Validación por medio de “hashes”Analizar archivos modificados en base a una validación de time stamp.Bloques de código, clases o sobre toda la aplicación.

23

Anti-Tampering

Re-empaquetar y firmar la aplicación con una firma distinta la válida.Correr la aplicación con la firma original y la modificada en paralelo.Controlar si solo la versión modificada (“resigned”) arroja un error de integridad.

24

Anti-Debugging

android.os.Debug.isDebuggerConnected() nativa de Android, si el modo debug es True, termina la ejecución de la aplicación.

if (android.os.Debug.isDebuggerConnected()){android.os.Process.killProcess(android.os.Process.myPid());}

25

Anti-Emulation

Validar la identificación del dispositivo

IMEI

Phone number

Voice mail number

SIM serial numberSubscriber IDBrandDeviceModel

26

Anti-Emulation

public boolean checkEmulation()

return (Build.PRODUCT.contains(“sdk”) || Build.MODEL.contains(“sdk”));}

public boolean checkEmulation() {

Context context = getApplicationContext();

if ("goldfish".equals(getProperty(context,"ro.hardware"))

|| "generic".equals(getProperty (context,"ro.product.device"))

|| "1".equals(getProperty (context,"ro.kernel.qemu")) ) {

return true; }

return false; }27

Anti-Emulation

public boolean checkEmulation() {

TelephonyManager mng = (TelephonyManager) getApplicationContext().getSystemService("phone");

if (mng.getSimOperatorName().equals("Android") || mng.getNetworkOperatorName().equals("Android")) {

return true;

}

return false;

28

Root-Check

/system/bin/su/system/xbin/su/sbin/su/system/su/system/bin/.ext/.su

29

30

SQLite & Shared Preferences

encrypted

SQLite:

SQLCipher https://www.zetetic.net/sqlcipher/

Shared Preferences:

https://github.com/scottyab/secure-preferences

https://github.com/sveinungkb/encrypted-userprefs 31

¿PREGUNTAS?

Juan Urbano Stordeur – [email protected]@juanurss

¡Muchas gracias!


Recommended