Cyttek - Android Sdk Security

Aunque contamos con productos y servicios en otros canales y sobre todo especializados en seguridad nuestra especialización siempre han sido proyectos en ATM de toda clase y por eso, es que liberamos nuestro SDK de seguridad para aplicaciones Android para que muchos más la puedan usar y simplificar sus necesidades de seguridad , pero para uso público para que las aplicaciones de android puedan ser más seguras en general, ya que creemos firmemente en que se debe incrementar la seguridad general en el sector de desarrollo de apps Mobile, este SDK permite poder integrar funciones de seguridad a las aplicaciones actuales de sus desarrolladores sin mucho esfuerzo, esta solución integra todo lo necesario para poder determinar qué protecciones debería tener cualquier app y que funciones extras relacionadas con seguridad mínima necesita su aplicación, además contamos con algunas versatilidades extras como es extracción de aplicaciones instaladas que permite poder conocer un poco más a tu cliente y poder determinar inclusive si sus celulares tienen malware corriendo y bloquear su app de ejecutarse en dicho caso.

Esta SDK fue creada para minimizar las vulnerabilidades de los celulares en los clientes los cuales corrían los aplicaciones del sector financiero de nuestros clientes ya que los usuarios suelen ser muy confiados y en el mismo dispositivo corren malware, se conectan desde cualquier red o ejecutan y instalan cualquier app junto a su aplicación bancaria o varias aplicaciones bancarias, creamos este SDK para poder proporcionar al banco mayor seguridad sobre su propia aplicación y conocer dónde o sobre qué entorno de riesgos estaban sus aplicaciones instaladas.

Para implementaciones privadas o desarrollos/ajustes y integración para uso comercial  pueden ponerse en comunicación con nosotros ya que vamos a mantener el soporte en clientes actuales y en los que deseen ayuda en la integración, para el resto pueden encontrar la sdk aquí:

cyttek/sdkSecurity
SDK android security. Contribute to cyttek/sdkSecurity development by creating an account on GitHub.

Información general

La librería SecurityDetections, es una sdk para dispositivos Android creada para la detección de vulnerabilidades, en el dispositivo Android donde se encuentre instalada la librería. La librería se encarga de realizar los siguientes procesos:

  1. Extraer información de todas las apps instaladas en el dispositivo, se creará una lista de todas las apps instaladas en el dispositivo.
  2. Generar una lista con todos los servicios que se estén ejecutando en el dispositivo.
  3. Crear una lista con la información de todos los certificados instalados en el dispositivo.
  4. Generar lista de todas las apps instaladas de tiendas no oficiales.
  5. Generar lista de todas las apps instaladas de tiendas oficiales.
  6. Detección si el dispositivo está rooted.
  7. Detección si existe algun app realizando sniffer.
  8. Detectar si el app está ejecutándose en un emulador.
  9. Detectar si el dispositivo tiene un proxy configurado.
  10. Chequear la información de los DNS configurados en el dispositivo.
  11. Detectar si existe alguna aplicación realizando overlay
  12. Verificar si la aplicación está corriendo en modo debugger
  13. Desactivar el uso de screenshot y grabaciones de pantalla
  14. Verificar las firmas actuales del apk
  15. Chequear la conexión a internet en el dispositivo

Guía de instalación

Para realizar la instalación de la librería dentro del proyecto Android, se debe realizar:

  1. Se debe copiar la siguiente dirección:

implementation 'com.cyttek.securitylib:SecurityDetection:0.0.15'

  1. Abrir el archivo gradle del app Android, donde se instalará la librería

  1. Copiar la ruta del paso 1, dentro del archivo gradle del app de android


  1. Hacer click en el botón Sync Now, que aparece en la esquina superior derecha del archivo gradle
  1. Una vez dado click en el botón Sync Now, verificar en la pantalla build que todo el proceso haya ocurrido sin problemas



Guía de uso

Para usar la librería, luego de haber realizado la instalación se debe instanciar el objeto SecurityData para poder acceder a los métodos, dentro de la actividad donde se desee ejecutar, pasando como parámetro la actividad donde se ejecutará la librería

SecurityData security = new SecurityData(this);

Métodos

Una vez instanciado la librería, se podrá acceder a los siguientes métodos:

ListAllInstalledApps:

Método encargado de retornar una lista de objetos, InfoApps, con toda la información relacionada a las aplicaciones instaladas en el dispositivo android. Esta lista estará conformada, tanto por aplicaciones del sistema como aplicaciones instaladas por el usuario. Para ejecutar el método se debe realizar el llamado de la siguiente manera:

List<InfoApps> apps = security.ListAllInstalledApps();

Información del objeto InfoApps:

  1. Nombre de la aplicación
  2. Nombre del paquete
  3. Código de versión
  4. Nombre de versión
  5. Directorio de data
  6. Directorio de fuente público
  7. Directorio fuente
  8. Fecha de instalación
  9. Fecha última actualización
  10. SHA1
  11. Tienda de donde se descargo el app
  12. Icono de aplicación
  13. Si es un app de sistema o no
  14. Lista de permisos que el app solicita
  15. Si tiene algún permiso que se considere peligroso
  16. Si tiene algún permiso que permita escribir la configuración del dispositivo o ejecutar aplicaciones en overlay

Respuesta Exitosa: Lista de aplicaciones instaladas en el dispositivo.

Respuesta Fallo: retorna null.

AppsInstalledUsingUnofficialStore:

Este método se encarga de retornar una lista de aplicaciones instaladas en el dispositivo, provenientes de fuentes desconocidas, es decir, si el app no fue descargada de Google Store, Samsung Store o Amazon App Store, la aplicación estará contenida en la lista. Para invocar el método se debe utilizar

List<InfoApps> appsOutsideStore = security.AppsInstalledUsingUnofficialStore();

Respuesta Exitosa: Lista de aplicaciones instaladas de fuentes desconocidas, si el la lista se retorna vacía no existen aplicaciones instaladas de fuentes desconocidas .

Respuesta Fallo: retorna null.

AppsInstalledUsingOfficialStore:

Este método funciona muy parecido al método anterior, con la diferencia que este retorna la lista de aplicaciones instaladas desde tiendas oficiales (Google Store, Samsung Store o Amazon App Store). Para invocar este método se debe utilizar:

List<InfoApps> appsFromStore = security.AppsInstalledUsingOfficialStore();

Respuesta Exitosa: Lista de aplicaciones instaladas de fuentes conocidas, si la lista se retorna vacía no existen aplicaciones instaladas de fuentes conocidas .

Respuesta Fallo: retorna null.

IsRoot:

Método encargado de retornar si el dispositivo está funcionando bajo métodos root. Para implementar el método se debe utilizar:

boolean rooted = security.isRoot();

Respuesta: retornara true, cuando el dispositivo se encuentre bajo root. False en el caso de que el dispositivo no esté rooted.

CheckSniffer:

Si el dispositivo se encuentra ejecutando alguna aplicación haciendo sniffer, bajo la modalidad de VPN, la cual no es necesario ser root para ejecutar el sniffer. Para ejecutar el metodo se puede utilizar:

boolean sniffer = security.CheckSniffer();

Respuesta: retornara true, cuando el dispositivo se encuentre ejecutando alguna aplicación sniffer. False en el caso de que el dispositivo no está ejecutando estas aplicaciones.

IsRunningEmulator:

Si se desea detectar si la aplicación está siendo ejecutada en un emulador con este método es posible. Para ejecutar el método se debe ejecutar:

boolean emulator = security.IsRunningEmulator();

Respuesta: retornara true, cuando el dispositivo se encuentre ejecutando en un emulador. False en caso contrario.

IsUsingProxy:

Esta función retorna un boolean, el cual contendrá el valor true en caso de que en el dispositivo exista un proxy instalado.

boolean proxy = security.IsUsingProxy();

Respuesta: retornara true, cuando el dispositivo tenga un proxy configurado. False en caso contrario.

InstalledCertificates:

El método se encargará de levantar una lista, con la información de todos los certificados instalados en el dispositivo y retorna una lista de objetos, con la información pertinente a los mismos

List<CertInfo> listCertInfo=security.InstalledCertificates();

Información del objeto CertInfo:

  1. Nombre del certificado
  2. Versión del certificado
  3. Tipo de certificado
  4. Nombre algoritmo de firmado
  5. Algoritmo OID
  6. Fecha de validez origen
  7. Fecha de validez final
  8. Serial del certificado
  9. SHA1 del certificado
  10. Llave pública de algoritmo del certificado
  11. Formato de la llave pública
  12. Llave pública
  13. Si el certificado es de sistema
  14. Si el certificado es de usuario

Respuesta Exitosa: Lista de certificados instalados en el dispositivo.

Respuesta Fallo: retorna null.

DNSDevice:

Al llamar al método, se levantará la información pertinente con relación al dns configurado en el dispositivo

CXNInfo cxnInfo = security.DNSDevice();

Información del objeto CXNInfo:

  1. Nombre de la conexion
  2. IP
  3. Mac Address
  4. DNS1
  5. DNS2
  6. Gateway
  7. Máscara de red
  8. SSID
  9. Señal de conexión
  10. Velocidad de conexión
  11. RSI

Respuesta Exitosa: Objeto con la información de los dns.

Respuesta Fallo: retorna null.

ServiceOnDevice:

Retorna una lista con la información de los servicios instalados en el dispositivo.

List<ServiceInfo> serviceInfo = security.ServiceOnDevice();

Información del objeto ServiceInfo:

  1. Nombre del servicio
  2. Nombre del paquete que ejecuta el servicio
  3. Clase del servicio
  4. Fecha de activación
  5. Fecha última vez activo
  6. Si el servicio se encuentra ejecutándose.
  7. Si el servicio se encuentra activo
  8. Información sobre si el paquete del servicio ejecuta permisos peligrosos
  9. Información sobre si el paquete del servicio ejecuta los permisos de cambiar configuraciones del sistema o ejecutar aplicaciones en overlay

Respuesta Exitosa: Objeto con la información de los dns.

Respuesta Fallo: retorna null.

ScreenOverLay:

Al ejecutar esta función, la misma retorna true si el cliente concede permisos especiales para que otra aplicación se esté ejecutando sobre la aplicación cliente, si no tiene dichos permisos y existe una aplicación ejecutándose en overlay, retornara true.

boolean overLay = security.ScreenOverLay();

Respuesta: True cuando existe una aplicación ejecutándose en overlay, false de no existir

isDebuggable:

Función encargada de detectar si la aplicación está ejecutándose en modo debugger

boolean debugger = security.isDebuggable();

Respuesta: True cuando se detecta que la aplicación se está ejecutando en modo debugger, false de no estar ejecutándose en modo debugger

disableScreenShot:

Al invocar esta función, la pantalla donde sea llamada, no podrá ser grabada, ni se podrá tomar capturas de pantalla.

security.disableScreenShot();

checkSignature:

Esta función se encargará de verificar si las firma de del apk no han sido alterada, se debe enviar como parámetro la firma en formato string de la codificación en base64 de la misma

boolean signature = security.checkSignature("firma base64");

Parámetros de entrada: se debe enviar en formato string la codificación de la firma en base64

Respuesta: True cuando la firma sea igual a la enviada en el parámetro, false cuando la firma haya sido modificada

haveInternetConnection:

Esta función se encargará de verificar si el dispositivo cuenta con conexión a internet, no solo que este conectado a un WIFI o a un plan de datos, sino que se pueda consultar información y obtener respuestas.

boolean connected = security.haveInternetConnection();

Respuesta: True de existir conexión, false cuando no se tenga conexión.

DeveloperOptionEnabled:

Al llamar esta función se obtendrá una respuesta positiva o negativa, sobre si el dispositivo tiene la opción de herramientas de desarrollador activada

boolean enable = security.DeveloperOptionEnabled();

Respuesta: True de estar activada la opción herramientas de desarrollador, false cuando no esté activada la opción.

UsbDebuggingEnabled:

Esta función retorna positivo o negativa, para informar que la opción debugging por usb, que se encuentra dentro de las opciones de desarrollador se encuentra activada o desactivada

boolean enable = security.UsbDebuggingEnabled();

Respuesta: True de estar activada la opción debugging por USB, false cuando no esté activada la opción.


DangerOfHooking:

Esta función se encargará de retornar una respuesta positiva o negativa, dependiendo si el app se encuentra en peligro de hooking o no

boolean hooking = security.DangerOfHooking();

Respuesta: True de correr riesgo de hooking, false cuando no lo esté.

EnableKeyloggerAndReaders:

La función se encargará de detectar si existe algún otra app ejecutándose, además del app y tratará de cerrarlo, además de avisar si existe algún servicio realizando keylogger o screen reader

boolean keylogger = security.EnableKeyloggerAndReaders();

Respuesta: True de correr riesgo de alguna aplicación ejecutando keylogger, false cuando no lo esté.

Información General y/o ayuda en implementaciones para uso comercial o simplemente cuéntanos para que la vas a usar nos encantaría escuchar de sus usos :

informacion@cyttek.com

Rafael Revert

Rafael Revert

CTO and Co-founder of Cyttek Group and international consulting company specialized in providing Cyber Security , ATM, IA, Big Data and custom products for different sectors
Panama