Todos hemos leído historias sobre hackeos de sistemas operativos, ya sea en teléfonos celulares, computadoras de escritorio y navegadores de Internet, entre otros. Y hemos notado que son elaboradísimos procedimientos de alguien que explota una debilidad, un agujero en la seguridad, para hacer algo que potencialmente podría ser desastroso para nuestra máquina. Entendemos sin embargo que estos hackeos están lejos de la mayoría de los programadores.

Sin embargo, ahora se ha hallado un error de seguridad en Android que parece estar lejos de tanta sofisticación, más bien parece un error burdo, incluso algunos lo han catalogado como estúpido. Para entenderlo, una de las protecciones claves de Android es que el código viene firmado. Cuando una aplicación de Android se instala, también se instala una firma criptográfica que verifica que la aplicación es la real y no una que ha sido modificada por terceros de alguna manera. Este mecanismo es estándar en muchísimos sistemas pero la semana pasada Jeff Forristal hizo público un error de Android en la seguridad.

Forristal indica que es posible cambiar una app de Android y poderla instalar sin tener que modificar su firma. El gran problema con esto es que la firma de Android es vulnerable a ser modificada sin afectar el valor de la firma calculada. Ahora tenemos una prueba de esto en la forma de un script de demostración, el cual prueba que la explotación puede hacerse prácticamente. El script, creado por Paul Oliva Fora, usa solamente las herramientas estándar de Android. Primero toma un programa válido verificable y usa la APKTool para decompilarlo. Una vez hecho esto, añade nuevos archivos que hacen lo que se le antoja al programador (con privilegios de administrador). El nuevo archivo APK entonces se carga en Android sin que se cheque que los nuevos archivos insertados verifican con la firma.

La razón de que ocurra esto es que cuando el sistema pide al objeto correspondiente a la llave, solamente se regresa el objeto, incluso si hay más de uno. Si el primer objeto es el archivo que se valida correctamente, entonces la segunda versión es el mismo archivo, el cual sigue teniendo la misma llave de encripción.

Esto es un serio problema de seguridad que podría ser explotado, pero es un error muy tonto y no puede considerarse un profundo problema en la seguridad del sistema operativo. La solución es que se haga el proceso de signado a todos los archivos en el APK incluso si hay duplicados, o tal vez, simplemente deshabilitando los duplicados. Ya algunos fabricantes de teléfonos que usan Android han empezado a manra la corrección al problema, por ejemplo Samsung, incluyendo sus dispositivos Google Nexus.

Referencias:

Explicación del hackeo por Al Sutton