#MundoHacker: 5 técnicas de evasión de controles de seguridad en apps

evasion app

Recupero la serie #MundoHacker, donde tratamos en varios tutoriales las medidas para atacar y/o defenderse en el mundo digital, después del parón veraniego, con una entrega dedicada a las técnicas de evasión de medidas de seguridad en sistemas operativos móviles.

Un mundo quizás no tan conocido de la seguridad informática, y que busca mediante “apaños” engañar a las herramientas de estos sistemas para hacerse pasar por aplicaciones legítimas.

Y veremos como buena parte de estas estrategias son utilizadas no solo en este escenario, sino en definitiva en cualquier otro donde haya controles que limitan el ámbito de actuación del cibercrimen (o del negocio).

Comencemos.

1.- Ofuscación

La más clásica entre las clásicas, y utilizada no solo en estos menesteres, sino también en prácticamente cualquier tipo de acción que debe estar fuera del ojo de terceros. Le he dedicado un artículo cuando hablábamos de la esteganografía (ya sabe, ofuscar información en algún elemento para que pase desapercibida), e incluso lo tratamos en un capítulo de esta serie al respecto de las 7 maneras de ofuscar URLs en campañas de phishing, y el fundamento es exactamente el mismo.

Lo que se busca es ofuscar parte del código de manera que los controles que tenga la propia plataforma (o los sistemas de seguridad habilitados) no den la voz de alarma. Herramientas como ProGuard para Android (EN) renombra carpetas, nombres de clases, métodos y variables usando el alfabeto, obteniendo así un código que podría pasar algunos controles básicos.

Claro está, todo lo que se hace automáticamente tiene su contra, y puesto que ProGuard no modifica el código en sí, sino los nombres de los elementos, es posible hacer un reversing conociendo la biblioteca usada y obtener el código real.

Sobra decir que la industria del cibercrimen suele crearse sus propios ProGuard, que van unos pasos por delante, complicando aún más las cosas (más al estilo DexGuard, que reemplaza nombres de clases y métodos por caracteres no-ASCII y luego los cifra).

Los chicos de Virus Bulletin publicaron un artículo el año pasado muy completo sobre ofuscación en Android (EN), y por este hilo de StackOverFlow (EN) debaten sobre algunas alternativas en iOS.

Porque al final la ofuscación puede hacerse con fines maliciosos o simplemente para proteger tu desarrollo de posibles copias o reversing de la competencia.

2.- Anti-AV

Uno de los más clásicos (y sencillos de aplicar). Partiendo de la base que TODOS nos leemos los permisos que la aplicación pide, y que en caso de estar desconformes bien no la instalamos, bien solo le concedemos los permisos específicos que creemos que debe de tener (nótese la ironía), una app con permisos de administrador (jailbreak/root) puede revisar el número de procesos en funcionamiento, compararlos con una lista negra (interna o bien llamada desde fuera), y bloquear aquellos relacionados con los sistemas antivirus más habituales.

El antivirus pasa entonces a ser una herramienta inútil (no podrá ejecutarse), o si se han currado un poco el trabajo, estará funcionando pero no podrá ver las acciones de la app maliciosa.

3.- Anti-LVL

Disponible en entornos Android, el App Licensing (EN) es un mecanismo que ofrece Android para compulsar que el apk que estamos instalando proviene de la fuente adecuada, no habiendo sido corrompido en un paso intermedio.

Aunque requiere unos conocimientos más elevados, la License Verification Library (LVL) puede ser vulnerada si no se ha personalizado (parametrizado) convenientemente, lo que en esencia permite a un tercero ofrecer aplicaciones legítimas que vienen con regalito en markets no oficiales.

4.- Anti-Emulación

Esta técnica es curiosa, puesto que la usan tanto los cibercriminales como prácticamente cualquier industria tecnológica hoy en día.

Es ya histórico el caso de fabricantes de smartphones que habían habilitado sistemas anti-emulación para engañar a los benchmarks (EN) y posicionar su nuevo terminal como mejor que la competencia, o recientemente el caso de Volkswagen, que ha tenido que reconocer su culpabilidad después de que una investigación realizada por una agencia de medioambiente demostrara sin margen de error que la compañía había instalado sistemas de anti-emulación para aparentar que sus coches contaminaban hasta cuarenta veces menos que lo que en verdad lo hacían (EN), y por ende, pasar los controles anuales a los que todos los vehículos han de estar sometidos.

La idea es exactamente la misma: Saber cuándo la aplicación está corriendo en un entorno emulado (habitual en los laboratorios de las compañías de antivirus), y entonces, comportarse adecuadamente, para no levantar sospechas.

Y dependiendo del sistema operativo, hay decenas de maneras de hacerlo.

Desde cadenas que se lanzan únicamente en entornos emulados, pasando por variables de entrada que como cabría esperar (al no existir una entrada real), avisan de que están en modo emulación, hasta archivos que se generan automáticamente en estos entornos, y que pueden ser fácilmente leídos por una aplicación con los permisos adecuados.

5.- Anti-debugging

Al igual que pasa con el caso de la emulación, la fase de depuración puede arrojar positivos indeseables si nuestro objetivo es no ser fichado como malware.

Y se opera entonces de la misma manera, preguntando directamente al sistema si estamos en modo depuración (en Android se hace con isDebuggerConnected() (EN)). ¿Qué responde que sí? Pues a comportarse como buenos chicos, no ejecutando el código malicioso.

Hilando el asunto, sería posible incluso saber si estamos en un entorno de depuración calculando el tiempo que tarda en realizarse una acción de alto desempeño, y comparándolo con los datos esperables en un escenario real.

¿Qué podemos hacer para defendernos?

Como usuarios, las medidas de seguridad habituales en entornos Android y entornos iOS, que pasan prácticamente por usar el sentido común, instalar solo aplicaciones del market oficial valoradas adecuadamente y no tener el terminal con jailbreak o rooteado si no es que de verdad lo necesitamos para vivir (y en ese caso, saber que es a costa de la seguridad).

Como desarrolladores hay estrategias para defender nuestro código y aplicaciones de ataques externos, como las mencionadas en este artículo (ES), y que pasan por implementar medidas anti-tampering, asegurarse que todo el código es debuggeable, segurizar el LVL, ofuscar el código,…

Como empresa de seguridad, ¿qué puedo decir que no sepan ya? Heurísticas cada vez más avanzadas junto a entornos de prueba reales (dispositivos reales con el mínimo software que pueda hacer saltar las alarmas de la propia app maliciosa).

Al fin y al cabo, se trata de una lucha por ver quién llega antes y mejor. Quien es más listo eludiendo o aplicando controles. Y tenemos las de perder, que conste :(.

 

________

Realizar este tipo de artículos me lleva varias horas, y en algunos casos, gastos extra que habitualmente suplo de mi bolsillo, o gracias a esa comunidad de patronos que me apoyan realizando donaciones puntuales o periódicas.

Si le gustaría ver más de estos tutoriales y análisis por aquí. Si el contenido que realizo le sirve en su día a día, piense si merece la pena invitarme a lo que vale un café, aunque sea digitalmente.

hazme patrono pabloyglesias