El panorama de la seguridad móvil deja entrever un constante avance en la complejidad de los códigos maliciosos móviles, entre los que se destacan aquellas familias dirigidas a comprometer especialmente dispositivos Android. Ya discutíamos algún tiempo atrás sobre la gran incidencia de los troyanos en el mundo del malware para esta plataforma, presentando posibles escenarios de evolución.
Veamos ahora, además de la ofuscación, qué técnicas son las más utilizadas por los cibercriminales para proteger sus creaciones en su afán de complicar el análisis a los profesionales de seguridad, con el objeto de prepararnos para su rápida identificación.
Antiemulación
Como es de esperar, los emuladores de Android presentan algunos atributos particulares que los distinguen de dispositivos reales. En particular, algunos atributos pertenecientes a la clase Build del sistema operativo denotarán la cadena «sdk», lo que permitirá a los cibercriminales conocer que están actuando en un entorno emulado y por tanto evadir la ejecución de las verdaderas actividades maliciosas.
return (Build.PRODUCT.contains(“sdk”) || Build.MODEL.contains(“sdk”));
}
public
boolean
checkEmulation() {
Context context = getApplicationContext();
if
(
"goldfish"
.equals(getProperty(context,
"ro.hardware"
))
//donde getProperty es el método encargado de la reflexión
||
"generic"
.equals(getProperty (context,
"ro.product.device"
))
||
"1"
.equals(getProperty (context,
"ro.kernel.qemu"
))
) {
return
true
;
}
return
false
;
}
public
boolean
checkEmulation() {
TelephonyManager mng = (TelephonyManager) getApplicationContext().getSystemService(
"phone"
);
if
(mng.getSimOperatorName().equals(
"Android"
) || mng.getNetworkOperatorName().equals(
"Android"
)) {
return
true
;
}
return
false
;
}
Por supuesto, existen otras muchas maneras de detectar emulación. Por ejemplo, si el archivo/proc/cpuinfo contiene el texto «Goldfish», si existen archivos como /init.goldfish.rc o/sys/qemu_trace, o si se detecta el demonio qemu (qemud) corriendo entre los procesos del sistema, la ejecución de la aplicación podría alterarse para evadir la detección.
Antidebugging
Del mismo modo que con ejecutables compilados para otras plataformas, la manera más sencilla para evaluar si la aplicación está siendo depurada consiste en utilizar la clase android.os.Debug del sistema e invocar al método isDebuggerConnected().
public
boolean
checkDebugging(){
if
(Debug.isDebuggerConnected()) {
return
true
;
}
return
false
;
}
Otros dos métodos proporcionados en dicha clase que pueden ayudar a la detección de depuración son waitForDebugger() y waitingForDebugger(), ya que de este modo se puede manejar un hilo para alertar inmediatamente luego de que el depurador fue conectado.
Claro que existen paquetes ofuscados que brindan estas y otras funcionalidades de manera combinada a los creadores de malware, de forma que solo deban preocuparse por el uso de estas características. Paquetes como los descritos pueden observarse en muestras comoAndroid/Secmider.B.
También es posible detectar depuradores a través del método Debug.threadCpuTimeNanos( ). El procedimiento consiste en invocar tal método y almacenar el resultado; luego, realizar algún tipo de operación intensiva para el CPU; invocar el método nuevamente y calcular la diferencia: si elintervalo es mayor de lo esperado en una ejecución en modo nativo, esto sugiere la presencia de algún depurador. No obstante, este método puede provocar errores ante un sistema bajo alta carga de procesamiento.
AntiAV
Entre las técnicas de protección de códigos maliciosos implementadas por los cibercriminales, es común observar su esfuerzo por saltear la protección brindada por soluciones de seguridad instaladas en los dispositivos.
La manera más sencilla de notar la presencia de estas herramientas en el sistema resulta la detección del paquete correspondiente según su denominación. Así, tenemos muestras comoAndroid/Jagonca.C y Android/Jagonca.D, que tras ganar permisos de administrador en el sistema recorren una lista de los procesos activos e intentan destruir aquellos que se corresponden con paquetes de casas de seguridad conocidas.
En última instancia, si acaso estas técnicas no brindan resultados, siempre restará la posibilidad de dejar algún que otro mensaje desde el lado oscuro.
AntiLVL
Para verificar el licenciamiento de aplicaciones desarrolladas, Android provee un mecanismo conocido como License Verification Library (LVL). Esto permite a los creadores de un aplicativo verificar la licencia para determinar el acceso a su uso. Tal protección puede ser vulnerada por cibercriminales para alterar aplicaciones genuinas agregando contenido ilícito para luego redistribuirlas a través de mercados no oficiales.
Es el caso de la firma antes mencionada, Android/Secmider.B. En esta encontramos un paquete añadido, ofuscado, destinado a sobrescribir la licencia de una determinada aplicación a través del uso de reflexión para realizar hooks a los métodos encargados de obtener datos como el identificador del dispositivo o la firma.
Para evitar este tipo de ataque es recomendable generar políticas personalizadas y trabajar en la creación de robustos esquemas de protección.
¿Cómo nos afectan estas técnicas?
Es una realidad que las muestras de códigos maliciosos poseen cada vez mayores mecanismos para la evasión en Android del análisis. Es importante entender que, en un futuro no muy lejano, la comprensión de estas y otras técnicas será clave para la detección de malware y el estudio de su comportamiento.
Fuente:https://www.welivesecurity.com/
Trabajando como arquitecto de soluciones de ciberseguridad, Alisa se enfoca en la protección de datos y la seguridad de datos empresariales. Antes de unirse a nosotros, ocupó varios puestos de investigador de ciberseguridad dentro de una variedad de empresas de seguridad cibernética. También tiene experiencia en diferentes industrias como finanzas, salud médica y reconocimiento facial.
Envía tips de noticias a info@noticiasseguridad.com o www.instagram.com/iicsorg/
También puedes encontrarnos en Telegram www.t.me/noticiasciberseguridad