Testing Android Security
José Manuel Ortega Candel | @jmortegac
https://speakerdeck.com/
jmortega
INDEX
•Introducción al ciclo de desarrollo
•Análisis estático y dinámico
•Desarrollo seguro en componentes
•Librerías de e...
Ciclo de desarrollo
Requerimientos
Análisis
Diseño
Desarollo
Testing / QA
Security review en
cada iteración
+Security
Requ...
Security testing
Security testing
SQLite
• Cifrado
• SQL injection
Cifrado de datos
 HTTPS
 Información sensible
Almacenamiento
• Fichero...
Security test cases
Test cases Example
Título/grado Encriptación /critical
Descripción Encriptar los datos sensibles del u...
White box / Black box
•Pruebas de caja blanca
•Pruebas de caja negra
 Análisis estático
 Cobertura de código
 Control d...
Análisis estático
•Analizar el código fuente
•Android Lint
•Android Studio > Inspect code > Security issues
•SonarQube > A...
Android Lint
Android inspect code
Android plugin in Sonar
https://github.com/SonarCommunity/sonar-android
Android plugin in Sonar
https://github.com/SonarCommunity/sonar-android
Android plugin in Sonar > Rules
https://github.com/SonarCommunity/sonar-android
JavascriptInterface [Missing @JavascriptIn...
Agnitio tool
 http://sourceforge.net/
projects/agnitiotool
 Análisis estático
 Decompilar APK
Buscar llamadas a funcion...
Androwarn
https://github.com/maaaaz/androwarn
python androwarn.py -i my_apk.apk -r html -v 3
Telephony identifiers exfiltr...
Android
Application
Vulnerability
Scanner tool
Android
Application
Vulnerability
Scanner tool
Ingeniería inversa
Decompile dalvik to smali / classes.dex in APK
APKTOOL
DEX2JAR
Java Decompiler
APKTOOL / DEX2JAR
Ingeniería inversa
https://github.com/nkpanda/Android-Testing
Mobiliz3r
Script en python
Ingeniería inversa
DexInspector
Dalvik bytecode editor
APK Reverser
APK Analyzer
APK Multitool
Análisis dinámico
•Monitorizar la aplicación
•Analizar el tráfico de red(Burp Suite,Wireshark,Fiddler)
•Inyectar instrucci...
DroidBox
https://code.google.com/p/droidbox
Permite monitorizar:
Fugas de información / Operaciones E/S de red y sobre fi...
DroidBox
Drozer
https://www.mwrinfosecurity.com/products/drozer
Analizar vulnerabilidades a través de un
agente/proxy
Permite int...
Drozer
https://www.mwrinfosecurity.com/products/drozer
Drozer
app-.package.info
TraceDroid
http://tracedroid.few.vu.nl
Análisis online de peticiones de red,llamadas,sms
También realiza un análisis est...
Seguridad en componentes
•AndroidManifest.xml
•Activities
•ContentProviders
•Services
•Sqlite
•Shared Preferences
•Webview
Factores de riesgo
•Permisos en androidManifest.xml
•Verificar la firma de la aplicación
•Origen de la aplicación
•Disposi...
Proteger los datos
set android:allowBackup=false
Crear ficheros en MODE_PRIVATE
Evitar almacenar información sensible e...
Almacenamiento
en ficheros
• MODE_WORLD_READABLE
• MODE_WORLD_WRITABLE
• MODE_PRIVATE
/mnt/sdcard is world-readable
and wo...
Logs
Sólo mostrar en
modo debug
Eliminar logs
con proguard
public static final boolean SHOW_LOG =
BuildConfig.DEBUG;
publi...
Atributo export
•En activity,content providers,broadcast
receivers y servicios debería estar a false
•Por defecto esta a f...
Limitar acceso desde otras aplicaciones
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
ComponentName v0 = t...
Custom permissions
<provider android:name="SampleContentProvider"
android:authorities="com.example.app.Provider“
android:e...
Webview
Deshabilitar JavaScript para evitar ataques cross-site
scripting(XSS)
myBrowserSettings.setJavaScriptEnabled(fal...
Librerías de terceros
Analizar posibles vulnerabilidades
PhoneGap
Apache Cordova
SQLite / SQLCipher
Fichero que se guarda en
/data/data/<package>/databases
Permite cifrar la base de datos con el algori...
SQLite Extension
Full Database Encryption
Good Performance
AES-256 Encryption
Portable
Open Source Core
SQLite / SQL injection
•Construir consultas mediante ?
•Sentencias preparadas
Secure Preferences
https://github.com/scottyab/secure-preferences
Fichero que se guarda en /data/data/<package>/shared_pr...
Secure
prefefences
SharedPreferences prefs = SecurePreferences(context);
Editor edit = prefs.edit();
edit.putString("key",...
Ofuscación
ProGuard / DexGuard /DashO
API Reflection
Encrypted Network Communication
Encrypted Files
Filtrar informac...
Proguard
http://proguard.sourceforge.net
Habilitar en Android Studio
build.gradle
Proguard
Configuration
1. change names of classes,
methods, fields
2. modify the control flow
3. code optimization
4. dyna...
Proguard
Detectar root
Permisos lectura /escritura sobre la carpeta
system
Comprobar acceso a los ficheros de las
aplicaciones de...
Detectar root
https://code.google.com/p/roottools
if (RootTools.isRootAvailable()) {
// su exists, do something
}
if (Root...
Anti-malware
Escanear aplicaciones y paquetes con la
información obtenida de
PackageManager.getInstalledPackages(int)
Co...
Encriptado
import java.security.*;
Import javax.crypto.*;
AES / RSA
Key 256 bits
SecureRandom
CBC - Cipher Block
Cha...
Mobile Top 10
Risks-
OWASP
(Open Web
Application Security
Project)
Mobile Top 10
Risks
OASAM-
Open Android
Security
Assessment
Methodology
http://oasam.org/en
OASAM-
Open Android
Security
Assessment
Methodology
http://oasam.org/es
Pentesting
Distribuciones que tienen integradas la mayorías
de aplicaciones de análisis estático y dinámico
Santoku linu...
Pentesting
Pentesting
https://code.google.com/
p/c-ray
Permite probar los
intents de forma manual
Forensics
https://github.com/viaforensics/android-
forensics
https://www.isecpartners.com/tools/mobile-
security.aspx
h...
Forensics
Mobile secure coding
Resources
Developer.android.com
• https://developer.android.com/training/articles/security-tips.html
• https://source.andr...
Resources
Android libraries security
• https://android-arsenal.com/tag/87
Open Source Security Testing Methodology Manual ...
Books
Books
Books
Thank you!
José Manuel Ortega Candel | @jmortegac
Próxima SlideShare
Cargando en…5
×

Testing Android Security

1.293 visualizaciones

Publicado el

Testing android security

Publicado en: Móvil
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
1.293
En SlideShare
0
De insertados
0
Número de insertados
407
Acciones
Compartido
0
Descargas
30
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

Testing Android Security

  1. 1. Testing Android Security José Manuel Ortega Candel | @jmortegac
  2. 2. https://speakerdeck.com/ jmortega
  3. 3. INDEX •Introducción al ciclo de desarrollo •Análisis estático y dinámico •Desarrollo seguro en componentes •Librerías de encriptado •OWASP Mobile Top Risks Security •Ofuscación de aplicaciones •Herramientas de pentesting /forensics
  4. 4. Ciclo de desarrollo Requerimientos Análisis Diseño Desarollo Testing / QA Security review en cada iteración +Security Requirements Analysis El Testing de seguridad se debería integrar en el ciclo de desarrollo e integración contínua desde las primeras etapas El objetivo es detectar posibles riesgos y minimizar las vulnerabilidades que nuestra aplicación pueda generar
  5. 5. Security testing
  6. 6. Security testing SQLite • Cifrado • SQL injection Cifrado de datos  HTTPS  Información sensible Almacenamiento • Ficheros • Shared Preferences • BD SQLite • Logs • Cache Enfocadas a verificar que el software está protegido de ataques externos y a certificar que se protege la confidencialidad, integridad y disponibilidad del sistema y sus datos Security testing is a process to determine that an information system protects data and maintains functionality as intended.
  7. 7. Security test cases Test cases Example Título/grado Encriptación /critical Descripción Encriptar los datos sensibles del usuario que se envían y reciben Detalles La información sensible(datos personales) se tiene que encriptar durante la transmisión o peticion de los mismos Resultado esperado La aplicación encrypta o cifra la información mediante alguno de los algoritmos soportados por el SDK
  8. 8. White box / Black box •Pruebas de caja blanca •Pruebas de caja negra  Análisis estático  Cobertura de código  Control de flujo  Análisis dinámico  Comportamiento en tiempo de ejecución  Performance
  9. 9. Análisis estático •Analizar el código fuente •Android Lint •Android Studio > Inspect code > Security issues •SonarQube > Android Plugin > Rules •Agnitio Tool •Androwarn •Ingeniería inversa
  10. 10. Android Lint
  11. 11. Android inspect code
  12. 12. Android plugin in Sonar https://github.com/SonarCommunity/sonar-android
  13. 13. Android plugin in Sonar https://github.com/SonarCommunity/sonar-android
  14. 14. Android plugin in Sonar > Rules https://github.com/SonarCommunity/sonar-android JavascriptInterface [Missing @JavascriptInterface on methods] As of API 17, you must annotate methods in objects registered with the addJavascriptInterface SetJavaScriptEnabled [Using setJavaScriptEnabled in webview] Your code should not invoke setJavaScriptEnabled if you are not sure that your app really requires JavaScript support WorldReadableFiles [openFileOutput() call passing MODE_WORLD_READABLE] There are cases where it is appropriate for an application to write world readable files, but these should be reviewed carefully to ensure that they contain no private data that is leaked to other applications HardcodedDebugMode [Hardcoded value of android:debuggable in the manifest] AllowBackup [Missing allowBackup attribute]
  15. 15. Agnitio tool  http://sourceforge.net/ projects/agnitiotool  Análisis estático  Decompilar APK Buscar llamadas a funciones que pueden suponer un riesgo Recomendaciones + checklist
  16. 16. Androwarn https://github.com/maaaaz/androwarn python androwarn.py -i my_apk.apk -r html -v 3 Telephony identifiers exfiltration: IMEI, IMSI, MCC, MNC, LAC, CID, operator's name... Device settings exfiltration: software version, usage statistics, system settings, logs... Geolocation information leakage: GPS/WiFi geolocation... Connection interfaces information exfiltration: WiFi credentials, Bluetooth MAC adress... Telephony services abuse: premium SMS sending, phone call composition... Audio/video flow interception: call recording, video capture... Remote connection establishment: socket open call, Bluetooth pairing, APN settings edit... PIM data leakage: contacts, calendar, SMS, mails... External memory operations: file access on SD card... PIM data modification: add/delete contacts, calendar events... Arbitrary code execution: native code using JNI, UNIX command, privilege escalation... Denial of Service: event notification deactivation, file deletion, process killing, virtual keyboard disable, terminal shutdown/reboot...
  17. 17. Android Application Vulnerability Scanner tool
  18. 18. Android Application Vulnerability Scanner tool
  19. 19. Ingeniería inversa Decompile dalvik to smali / classes.dex in APK APKTOOL DEX2JAR Java Decompiler
  20. 20. APKTOOL / DEX2JAR
  21. 21. Ingeniería inversa https://github.com/nkpanda/Android-Testing Mobiliz3r Script en python
  22. 22. Ingeniería inversa DexInspector Dalvik bytecode editor APK Reverser APK Analyzer APK Multitool
  23. 23. Análisis dinámico •Monitorizar la aplicación •Analizar el tráfico de red(Burp Suite,Wireshark,Fiddler) •Inyectar instrucciones para detectar comportamientos anómalos o sospechosos •DroidBox •Drozer •TraceDroid
  24. 24. DroidBox https://code.google.com/p/droidbox Permite monitorizar: Fugas de información / Operaciones E/S de red y sobre ficheros Operaciones de cryptografía / Llamadas SMS y telefónicas
  25. 25. DroidBox
  26. 26. Drozer https://www.mwrinfosecurity.com/products/drozer Analizar vulnerabilidades a través de un agente/proxy Permite interactuar con activities,servicios,broadcast receivers y content providers Automatizar testing de seguridad
  27. 27. Drozer https://www.mwrinfosecurity.com/products/drozer
  28. 28. Drozer app-.package.info
  29. 29. TraceDroid http://tracedroid.few.vu.nl Análisis online de peticiones de red,llamadas,sms También realiza un análisis estático y de cobertura de código Está orientada a detección de malware
  30. 30. Seguridad en componentes •AndroidManifest.xml •Activities •ContentProviders •Services •Sqlite •Shared Preferences •Webview
  31. 31. Factores de riesgo •Permisos en androidManifest.xml •Verificar la firma de la aplicación •Origen de la aplicación •Dispositivo rooteado •Depuración habilitada en androidManifest <application android:debuggable=“true”/>
  32. 32. Proteger los datos set android:allowBackup=false Crear ficheros en MODE_PRIVATE Evitar almacenar información sensible en la SD CARD Filtrar información de log
  33. 33. Almacenamiento en ficheros • MODE_WORLD_READABLE • MODE_WORLD_WRITABLE • MODE_PRIVATE /mnt/sdcard is world-readable and world‐writable • WRITE_TO_EXTERNAL_STORAGE PERMISSION • Any application can access to sd- card WORLD_READABLE / WORLD_WRITABLE Deprecated API >=17 Otra aplicación podría leer el fichero si conoce la ruta Fichero que contengan información confidencial deberían crearse con el permiso MODE_PRIVATE
  34. 34. Logs Sólo mostrar en modo debug Eliminar logs con proguard public static final boolean SHOW_LOG = BuildConfig.DEBUG; public static void d(final String tag, final String msg) { if (SHOW_LOG) Log.d(tag, msg); } -assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static *** d(...); public static *** v(...); public static *** i(...); public static *** e(...); } Proguard configuration
  35. 35. Atributo export •En activity,content providers,broadcast receivers y servicios debería estar a false •Por defecto esta a false a partir de la version 4.2 en content-providers
  36. 36. Limitar acceso desde otras aplicaciones public void onCreate(Bundle bundle) { super.onCreate(bundle); ComponentName v0 = this.getCallingActivity(); if (v0 == null) { this.finish(); } else if (!"package_name".equals(v0.getPackageName())) { this.finish(); } } • Comprobar que quien llama a la activity sea un componente que se encuentre en el mismo paquete/proyecto
  37. 37. Custom permissions <provider android:name="SampleContentProvider" android:authorities="com.example.app.Provider“ android:export=“true" android:permission="com.example.app.permission.Provider" /> <permission android:protectionLevel="signature" android:name="com.example.app.permission.Provider"> </permission> protectionLevel="signature" – Permite limitar el acceso a componentes de aplicaciones firmadas con el mismo certificado
  38. 38. Webview Deshabilitar JavaScript para evitar ataques cross-site scripting(XSS) myBrowserSettings.setJavaScriptEnabled(false); Deshabilitar el acceso a ficheros myBrowserSettings.setAllowFileAccess(false); Usar la anotación @JavascriptInterface para aquellos métodos que queramos exponer en javascript
  39. 39. Librerías de terceros Analizar posibles vulnerabilidades PhoneGap Apache Cordova
  40. 40. SQLite / SQLCipher Fichero que se guarda en /data/data/<package>/databases Permite cifrar la base de datos con el algoritmo de encriptación AES 256 bits SQLiteDatabase myPrivateDB = openOrCreateDatabase("Contacts", MODE_PRIVATE, null);
  41. 41. SQLite Extension Full Database Encryption Good Performance AES-256 Encryption Portable Open Source Core
  42. 42. SQLite / SQL injection •Construir consultas mediante ? •Sentencias preparadas
  43. 43. Secure Preferences https://github.com/scottyab/secure-preferences Fichero que se guarda en /data/data/<package>/shared_prefs Librería que permite securizar este fichero Permite cifrar keys y values AES Encryption(Simétricomisma clave para encriptar y desencriptar) La primera vez que se instancia SecurePreferences,se crea una clave que permite encriptar y desencriptar los valores
  44. 44. Secure prefefences SharedPreferences prefs = SecurePreferences(context); Editor edit = prefs.edit(); edit.putString("key", "value"); edit.apply();
  45. 45. Ofuscación ProGuard / DexGuard /DashO API Reflection Encrypted Network Communication Encrypted Files Filtrar información de log y debug
  46. 46. Proguard http://proguard.sourceforge.net Habilitar en Android Studio build.gradle
  47. 47. Proguard Configuration 1. change names of classes, methods, fields 2. modify the control flow 3. code optimization 4. dynamic code loading 5. change instructions with metamorphic technique
  48. 48. Proguard
  49. 49. Detectar root Permisos lectura /escritura sobre la carpeta system Comprobar acceso a los ficheros de las aplicaciones dentro de /data/data/<package_name>
  50. 50. Detectar root https://code.google.com/p/roottools if (RootTools.isRootAvailable()) { // su exists, do something } if (RootTools.isAccessGiven()) { // your app has been granted root access }
  51. 51. Anti-malware Escanear aplicaciones y paquetes con la información obtenida de PackageManager.getInstalledPackages(int) Comprobar nombres de paquetes,permisos y firmas Comprobar cada vez que se instala una aplicación a través del intent android.intent.action.PACKAGE_ADDED
  52. 52. Encriptado import java.security.*; Import javax.crypto.*; AES / RSA Key 256 bits SecureRandom CBC - Cipher Block Chaining AES/CBC/PKCS5Padding cipher algorithm Password-Based Key Derivation Function
  53. 53. Mobile Top 10 Risks- OWASP (Open Web Application Security Project)
  54. 54. Mobile Top 10 Risks
  55. 55. OASAM- Open Android Security Assessment Methodology http://oasam.org/en
  56. 56. OASAM- Open Android Security Assessment Methodology http://oasam.org/es
  57. 57. Pentesting Distribuciones que tienen integradas la mayorías de aplicaciones de análisis estático y dinámico Santoku linux https://santoku-linux.com Mobisec http://sourceforge.net/projects/mobisec
  58. 58. Pentesting
  59. 59. Pentesting https://code.google.com/ p/c-ray Permite probar los intents de forma manual
  60. 60. Forensics https://github.com/viaforensics/android- forensics https://www.isecpartners.com/tools/mobile- security.aspx http://andriller.com
  61. 61. Forensics
  62. 62. Mobile secure coding
  63. 63. Resources Developer.android.com • https://developer.android.com/training/articles/security-tips.html • https://source.android.com/devices/tech/security OWASP • https://www.owasp.org/index.php/OWASP_Mobile_Security_Project Open Android Security Assessment Methodology • http://oasam.org/en
  64. 64. Resources Android libraries security • https://android-arsenal.com/tag/87 Open Source Security Testing Methodology Manual (OSSTMM) • http://www.isecom.org/research/osstmm.html,
  65. 65. Books
  66. 66. Books
  67. 67. Books
  68. 68. Thank you! José Manuel Ortega Candel | @jmortegac

×