domingo, 29 de agosto de 2010

¿Bug o no bug?


“DLL Hijacking”... alguien había escuchado de este término? Si jamás lo llegaste a escuchar, no te sientas mal, es otro terminajo que nos encanta a los de seguridad. En las últimas semanas de agosto tomó relevancia ya que se descubrieron problemas de DLL hijacking en cierto sistema operativo (adivinen cuál).

Cuando una aplicación, digamos AppX.exe se ejecuta, es probable que haga uso de una DLL. Una DLL es una “librería que contiene código y datos que pueden ser usados por más de un programa a la vez”. En caso de que haga uso de esa librería, nuestra amiga AppX.exe va a buscarla en el mismo directorio donde vive.

Ejemplifiquemos. Si la AppX.exe reside en “c:\program files\AppX\”, entonces ahí mismo va a buscar primero su DLL. Si no la encuentra ahí seguirá un orden preestablecido de búsqueda y se irá a tratar de encontrarla en otras rutas, como la del sistema o la de Windows; lo anterior sucederá a menos que el desarrollador haya especificado una ruta (y que es lo que debería de suceder en un mundo ideal).

Pues bien, ya se imaginan a dónde voy. Si saco a AppX.exe de su entorno natural y la pongo (por ejemplo) en un USB junto con una DLL maliciosa que yo hice, lo que hará AppX.exe es llamar a esa DLL porque ambas están juntas en el mismo directorio y ya no buscará su DLL benigna a donde vivía antes: c:\program files\AppX\.

Espero no haberte confundido más. En fin, Microsoft dice en pocas palabras que ese no es su problema porque los desarrolladores deben de especificar en su codificación una ruta definida donde la aplicación busque su DLL (lo que evitaría este ataque). Tal vez a los codificadores les da flojera o ignoran este peligro y llaman a su DLL (desde las líneas de código) sólo por nombre y sin poner su ruta específica.

Y no se trata de un par de aplicaciones afectadas por ahí, sino que hay toda una lista. Safari, Chrome, Media Player, PowerPoint, Microsoft Movie Maker o Firefox, entre otras. Y sí, hay aplicaciones de Microsoft que se ven afectadas. Así es que ellos mismos hicieron el error de llamar a las DLL por nombre y sin especificar una ruta, chups.

Para no variar y como varios ataques populares, este DLL hijacking ya tiene video-demo. El usuario abre una presentación PowerPoint y cuando lo hace, zas! Acabó todo para la víctima. Como ven, se necesita participación del usuario. Pero vaya, digamos que los usuarios en general son muy cooperativos, cierto?

¿Bug o no bug? Por diseño se permite llamar a una DLL por nombre (supongo que para facilitar la vida y no tener que poner una ruta cada vez que se llama a una DLL), así es que es una vulnerabilidad o una simple funcionalidad abusada inteligentemente?

Debido a este DLL hijacking no se va a acabar el mundo ni se van a crear gusanos apocalípticos como Blaster. Me llamó la atención desde el inicio y quería comentarlo aquí porque es un ejemplo de una semi-vulnerabilidad que está en el limbo debido a que no hay contundencia en que sea una debilidad o una característica de la cual se ha abusado.

Aunque si un atacante puede realizar un ataque aprovechándose de esta “funcionalidad”, pues que no es...mmhh...una vulnerabilidad?