A fines del año pasado, utilizando la función de detección de cambios en el área del sistema, algunos de nuestros usuarios registraron un cambio en el archivo del sistema /system/lib/libc.so. Esta es una de las principales bibliotecas de sistemas operativos basados en Linux que se encarga de las llamadas al sistema y las funciones básicas. Un examen detallado de este caso reveló nuevas muestras de la familia de troyanos
Android.Xiny , que conocemos desde 2015.
Por primera vez, vimos la instalación del atributo "
inmutable " en los archivos de sus representantes, lo que complicó en gran medida la eliminación de troyanos de los dispositivos.
Parecía bastante divertido: el atributo especificado se colocó en el archivo apk de la aplicación instalada, un intento de eliminar esta aplicación parecía exitoso, sus datos se eliminaron, pero el archivo apk permaneció en su lugar. Después de reiniciar el dispositivo, la aplicación "apareció" nuevamente.
Hablamos sobre uno de estos troyanos en 2016. Para combatir tales amenazas, hemos agregado una función de restablecimiento de atributos de archivo a nuestro antivirus, que funciona bajo la condición de que el usuario haya otorgado privilegios de root al antivirus.
En este artículo, consideraremos otro método interesante de defensa personal, utilizado por las nuevas versiones de Android.Xiny.
Android 5.1? En 2019?
El troyano considerado en este artículo funciona en el sistema operativo Android hasta la versión 5.1 inclusive. Puede parecer extraño que el malware diseñado para tales versiones "antiguas" de Android todavía esté activo (la versión 5.1 se lanzó en 2015). Pero a pesar de su edad, las versiones anteriores todavía están en uso. Según
Google, a partir del 7 de mayo de 2019, el 25.2% de los dispositivos tienen Android 5.1 y versiones inferiores. Las estadísticas para nuestros usuarios dan un número ligeramente mayor, alrededor del 26%. Esto significa que aproximadamente una cuarta parte de todos los dispositivos Android son objetivos potenciales, lo que no es tan pequeño. Dado que estos dispositivos son susceptibles a vulnerabilidades que nunca serán reparadas, no es sorprendente que las versiones anteriores del sistema operativo Android sigan siendo interesantes para los creadores de virus. De hecho, los derechos de root, que se pueden obtener explotando las vulnerabilidades mencionadas, desatan las manos de los creadores de virus: con su ayuda, puede hacer cualquier cosa en el dispositivo. Aunque la mayoría de las veces se trata de la instalación banal de aplicaciones.
Las principales funciones del troyano.
A partir de las primeras versiones, la función principal del troyano Android.Xiny es instalar aplicaciones arbitrarias en el dispositivo sin permiso del usuario. Por lo tanto, los atacantes pueden ganar dinero participando en programas de afiliación que pagan la instalación. Hasta donde se puede juzgar, esta es una de las principales fuentes de ingresos para los creadores de esta familia. Después de lanzar algunos de sus representantes, puede obtener un dispositivo prácticamente inoperativo en unos minutos, en el que se instalarán y ejecutarán muchas aplicaciones de usuario inofensivas pero innecesarias. Además, estos troyanos también pueden instalar malware, todo depende del comando recibido del servidor de administración.
Lo más interesante que desencadena nuevas versiones del Android.Xiny Trojan es la protección contra la eliminación. Dos componentes son responsables de ello. Consideremos con más detalle.
Instalador
sha1: f9f87a2d2f4d91cd450aa9734e09534929170c6c
Detectar: Android.Xiny.5261
Este componente comienza después de obtener privilegios de root. Reemplaza los archivos del sistema / system / bin / debuggerd y / system / bin / ddexe para garantizar su inicio automático, y guarda los originales bajo los nombres con el sufijo _server, actuando como un virus complementario clásico. También copia varios archivos ejecutables más a la partición del sistema desde la carpeta pasada en los parámetros de la línea de comandos. Además, el troyano puede actualizar los componentes que instaló en la partición del sistema si lo ejecuta con parámetros especiales y especifica la carpeta donde se encuentran las nuevas versiones.
Android.Xiny.5261 contiene una impresionante lista de archivos para eliminar. Incluye rutas características de los miembros más antiguos de la familia, así como familias competidoras de troyanos instalados en la partición del sistema. Como, por ejemplo, Triada.

Además, Android.Xiny.5261 elimina algunas aplicaciones preinstaladas, posiblemente para liberar espacio. Finalmente, elimina las conocidas aplicaciones de administración de derechos de root, como SuperSU, KingRoot y otras. Por lo tanto, priva al usuario de la capacidad de utilizar los derechos de root y, por lo tanto, eliminar los componentes troyanos instalados en la partición del sistema.
Biblioteca del sistema modificada libc.so
sha1: 171dba383d562bec235156f101879223bf7b32c7
Detectar: Android.Xiny.5260
Este archivo nos interesó más, y esta investigación comenzó con él. Un vistazo rápido en la vista revela la presencia de código ejecutable cerca del final en la sección .data, lo cual es sospechoso.


Abra el archivo en la IDA y vea qué tipo de código es.
Resulta que las siguientes funciones se han cambiado en esta biblioteca: mount, execve, execv, execvp, execle, execl, execlp.
Código de función de montaje modificado:
int __fastcall mount ( const char * source , const char * target , const char * filesystemtype , unsigned int mountflags , const void * data )
{
unsigned __int8 systemPath [ 19 ] ; // [sp + 18h] [bp-1Ch]
bool recibidoMagicFlags ; // [sp + 2Bh] [bp-9h]
int v13 ; // [sp + 2Ch] [bp-8h]
v13 = MAGIC_MOUNTFLAGS ; // 0x7A3DC594
recibidoMagicFlags = mountflags == MAGIC_MOUNTFLAGS ;
if ( mountflags == MAGIC_MOUNTFLAGS )
mountflags = 0x20 ; // MS_REMOUNT
if ( recibidoMagicFlags )
return call_real_mount ( fuente , destino , tipo de sistema de archivos , banderas de montaje , datos ) ;
if ( mountflags & 1 ) // MS_RDONLY
return call_real_mount ( fuente , destino , tipo de sistema de archivos , banderas de montaje , datos ) ;
if ( getuid_ ( ) ) // no root
return call_real_mount ( fuente , destino , tipo de sistema de archivos , banderas de montaje , datos ) ;
memCopy ( systemPath , ( unsigned __int8 * ) off_73210 + 471424 , 8 ) ; // / system
descifrar ( systemPath , 8 ) ;
if ( memCompare ( ( unsigned __int8 * ) target , systemPath , 8 ) || ! isBootCompete ( ) )
return call_real_mount ( fuente , destino , tipo de sistema de archivos , banderas de montaje , datos ) ;
* ( _DWORD * ) errno_ ( ) = 13 ;
volver - 1 ;
}
Al principio, el parámetro mountflags se verifica para la presencia del valor "mágico" 0x7A3DC594. Si este valor se pasa a la función, el control se transfiere inmediatamente a la función de montaje real. A continuación, se verifica si se ha intentado volver a montar la partición / system para escribir y si se ha completado el arranque del sistema operativo. Si se cumplen estas condiciones, no se llama a la función de montaje real y se devuelve un error. Por lo tanto, la función de montaje modificada por el troyano no permite que nadie vuelva a montar la partición del sistema para escribir, excepto el troyano mismo, que lo llama con el parámetro "mágico".
El código de la función execve modificada (en el resto de las funciones exec * todo es igual):
int __fastcall execve ( const char * nombre de archivo , char * const argv [ ] , char * const envp [ ] )
{
int v3 ; // r3
if ( targetInDataOrSdcard ( filename ) > = 0 ) // devuelve -1 si es verdadero
{
sub_7383C ( ) ;
v3 = call_real_execve ( nombre de archivo , argv , envp ) ;
}
otra cosa
{
* ( _DWORD * ) errno_ ( ) = 13 ;
v3 = - 1 ;
}
volver v3 ;
}
int __fastcall targetInDataOrSdcard ( const char * ruta )
{
char buf [ 516 ] ; // [sp + 8h] [bp-204h]
if ( isDataOrSdcard ( ruta ) )
volver - 1 ;
if ( * ruta == '.' && getcwd_ ( buf , 0x200u ) && isDataOrSdcard ( buf ) )
volver - 1 ;
devuelve 0 ;
}
Aquí se verifica si la ruta al archivo iniciado comienza con "/ data /" y si contiene "/ sdcard". Si se cumple una de las condiciones, se bloquea el inicio. Recuerde que a lo largo de la ruta / data / data / están los directorios de la aplicación. Esto bloquea la ejecución de archivos ejecutables de todos los directorios en los que una aplicación normal puede crear un archivo.
Los cambios realizados en la biblioteca del sistema libc.so interrumpen las aplicaciones diseñadas para obtener privilegios de root. Debido a los cambios en las funciones exec *, dicha aplicación no podrá iniciar exploits para aumentar los privilegios en el sistema, ya que generalmente los exploits son archivos ejecutables que se descargan de la red al directorio de la aplicación y se ejecutan. Si todavía logró aumentar los privilegios, la función de montaje modificada no le permitirá volver a montar la partición del sistema para escribir, lo que significa que no realizará ningún cambio en ella.
Como resultado, la autodefensa del troyano consta de dos partes: su instalador desinstala las aplicaciones para administrar los derechos de root, y la biblioteca libc.so modificada evita que se vuelva a instalar. Además, esta protección también funciona con “competidores”: otros troyanos que obtienen privilegios de root y se instalan en la partición del sistema, ya que funcionan con el mismo principio que las aplicaciones de privilegios de root “buenas”.
¿Cómo lidiar con tal troyano?
Para deshacerse de Android.Xiny.5260, el dispositivo se puede actualizar, siempre que haya un firmware de acceso abierto para él. Pero, ¿es posible eliminar el malware de otra manera? Difícil, pero posible: hay varias formas. Para obtener privilegios de root, puede usar exploits en forma de so-bibliotecas. A diferencia de los archivos ejecutables, el troyano no bloqueará su descarga. También puede usar el componente del troyano, que está diseñado para proporcionar derechos de root a sus otras partes. Recibe comandos a través del socket a lo largo de la ruta / dev / socket / hs_linux_work201908091350 (la ruta puede diferir en diferentes modificaciones). En cuanto a omitir el bloqueo de montaje, puede usar el valor "mágico" del parámetro mountflags o llamar directamente a la llamada al sistema correspondiente.
Por supuesto, no implementaré esto.Si su dispositivo recoge un troyano de este tipo, recomendamos utilizar la imagen oficial del sistema operativo para actualizarlo. Sin embargo, no olvide que esto eliminará todos los archivos y programas de usuario, así que asegúrese de crear copias de seguridad por adelantado.