Descargar

En el foco de los hackers: vulnerabilidades de software


     

     

    Hay dos posibles situaciones que pueden ser explotadas por un hacker(1) que busca tomar el control de un sistema:

    a) programas y sistemas mal configurados por error del usuario

    b) programas y sistemas con vulnerabilidades conocidas (errores de programación presentes en el software)

    Según mis propias estadísticas como auditor de sistemas, la situación "a" (sistemas mal configurados) produce sólo un 14% de los incidentes de seguridad, en tanto que la situación "b" (vulnerabilidades por errores internos del software) produce el 86% restante. (2)

     

    Evolución del panorama de seguridad informática en los últimos años

    Si bien no cuento con cifras sobre este fenómeno hace 11 años (cuando me inicié profesionalmente en esta actividad), bien recuerdo que los incidentes de seguridad informática se debían casi exclusivamente a errores de configuración por parte de administradores y usuarios. Las vulnerabilidades internas de los programas también causaban problemas, pero no con la frecuencia que experimentamos en la actualidad.

    De modo que el panorama de (in)seguridad en Tecnologías de la Información ha ido evolucionando hasta la situación actual, en que los errores (o "Bugs") en los programas son los responsables de la inmensa mayoría de los incidentes de seguridad informática.

    Las causas de estos cambios son:

    * Mayor cantidad y calidad en la documentación que indica cómo instalar un programa; lo que reduce la presencia de sistemas mal instalados, produciendo la baja de la situación "a".

    * Mayor cuidado de la configuración de seguridad por parte de los empaquetadores de software. Por ejemplo: en las distribuciones Linux actuales, la instalación por defecto resulta relativamente segura, al contrario de lo que ocurría hace unos años, cuando un Linux recién instalado tenía decenas de servicios y puertos abiertos innecesariamente. Este otro fenómeno también produce la baja de la situación "a".

    * Los programadores siguen cometiendo errores de seguridad en sus programas, al igual que hace 10 años.

     

    Esto es debido a:

    1) Los programadores no necesariamente son expertos en seguridad.

    2) No existe ninguna asignatura de "programación segura" en los currículos de universidades e institutos.

    3) En las compañías de software, los "empresaurios" presionan a sus programadores para reducir los plazos de desarrollo del software, pero no imponen ningún requerimiento en cuanto a la seguridad del código que éstos producen.

    4) Las auditorías de seguridad de código fuente no son para nada populares. Aunque existen muy dignas excepciones, como ser el grupo que produce el sistema opertaivo libre OpenBSD.Debido a estas causas, la enorme producción de software que se desarrolla en la actualidad sigue manifestando prácticamente los mismos tipos de defectos que se encontraban en los softwares de hace algunos años.

     

    * En los últimos años se descubrió una nueva categoría de vulnerabilidad en programas compilados en lenguaje C o creados mediante herramientas que enlazan código C (casi todas): los ataques por "string format". Estos se suman a los anteriormente conocidos "buffer overflows" (desbordamientos de búfer). Esta innovación prácticamente duplica el horizonte de las posibilidades de ataques a programas de software. Este factor produce un alza en la situación "b".

    * En los últimos años se ha producido un fenómeno social (posiblemente impulsado desde Hollywood) (3) en que millares de adolescentes quieren ser "hackers". A partir de este fenómeno, se ha multiplicado la cantidad de personas que –aún sin conocer los fundamentos técnicos de lo que están haciendo– utilizan programas llamados "exploits" que aprovechan los errores conocidos en determinados sistemas para generar una forma de acceso que permita al atacante la manipulación remota del sistema atacado.

    * En los últimos años han proliferado los Centros de Incidentes Informáticos: instituciones que se especializan en reportar y recopilar información sobre problemas de seguridad en Tecnologías de la Información.

     

    Estos datos son usados por los "buenos", pero también son usados por los "malos". De ahí que el conocimiento de las vulnerabilidades en softwares haya adquirido una capacidad de propagación sin precedentes. Es un ciclo en que el último en enterarse de la existencia de un "bug" suele ser el propietario de un sistema recién atacado.

     

    * Se han popularizado un tipo de aplicaciones conocidas como "gusanos", que no son otra cosa que programas que escanean automáticamente la Internet buscando sistemas que presenten alguna vulnerabilidad predeterminada. Una vez que encuentran un sistema de estas características, aplican un procedimiento de explotación del error (lo mismo que haría un hacker a mano) y penetran en el sistema víctima. Una vez dentro, pasan a ejecutarse y desde allí comienzan a escanear la Internet, comenzando nuevamente el proceso en forma propagatoria.

    * Se han popularizado los portales "underground" donde es posible descargar un número creciente de "exploits" por parte de cualquier persona que sepa buscar en Internet. Muchos de estos "exploits" ya vienen compilados. A su vez estas herramientas vienen cada vez más y mejor documentadas (a diferencia de los de antes: para saber cómo usarlos había que revisar y entender completamente su código fuente).

     

     

    He enumerado algunos de los fenómenos que han contribuído a la conformación del panorama actual de la Seguridad de Sistemas, donde el principal origen de los incidentes de seguridad son los errores (o bugs) en los softwares y sistemas instalados.

     

    Ciclo de vida de un software, su explotación y (deseablemente) su actualización y/o parchado

    Posiblemente no exista ningún software en el mundo que se encuentre libre de manifestar un error en algún momento del futuro. Los errores existen en TODOS los programas. Aunque aún no hayan sido descubiertos… pero hay tanta gente investigando… hurgando en todos los aspectos del funcionamiento… analizando meticulosamente cada pequeño detalle… Podemos afirmar que tarde o temprano alguien en algún lugar encontrará una forma de aprovechar un error hasta entonces no descubierto en el software.

    Cuando instalamos un sistema nuevo (un servidor web, por ejemplo), normalmente utilizamos una versión muy reciente de software, tanto en el sistema operativo como en las aplicaciones del servidor. Si es así, este servidor (suponiendo que esté bien configurado) no manifestará problemas de seguridad durante algún tiempo.

    Pero SIN DUDA llegará el día en que alguien descubra y reporte una vulnerabilidad en alguno de los programas (que en el caso de un servidor web podrían ser Apache, PHP, ASP, IIS, OpenSSL, cgi, Perl, MySQL, SQLserver, o el propio Kernel del sistema). Cualquiera de estos programas que manifieste un error está exponiendo nuestro servidor al ataque de un intruso. Y de estos intrusos hay por millares, dando vueltas por las redes… buscando estos errores. Casi al mismo tiempo de descubierta la vulnerabilidad, el autor del software lanzará una nueva versión, o en su defecto un "parche" o actualización (o "service pack") para solucionar el problema de seguridad en versiones ya instaladas sin necesidad de sustituírlas.

    Entonces es en este punto donde surge la disyuntiva que puede salvar los sistemas, o condenarlos a la intrusión de hackers: si el administrador de sistemas se entera de la existencia del problema –y su solución– aplicará el parche. Si no se entera… entonces tarde o temprano un intruso hará uso del mismo.

    Lo importante es la certeza de que EN ALGUN MOMENTO TODOS LOS PROGRAMAS ESTAN EXPUESTOS A MANIFESTAR ALGUNA VULNERABILIDAD DE SEGURIDAD. Y el único secreto para no estar expuesto es tomar las medidas a tiempo.

     

    EL camino más corto a la explotación de sistemas

    Por un momento pongámonos del lado del atacante. Es interesante saber que la mayoría de los atacantes no suelen buscar algún objetivo concreto. Es decir: la víctima de tuno puede ser absolutamente cualquier servidor o sistema que sea pasible de ser atacado: que manifieste una vulnerabilidad que el atacante conozca y sea capaz de explotar. Para estos hackers lo importante es conquistar el servidor. No importa cuál sea. Pasará a ser una de sus hazañas, y contribuirá a fundar su prestigio dentro de su comunidad.

    El próximo paso del ataque es reunir su "arsenal" (los programas de explotación que les permitirán aprovechar cierto conjunto de vulnerabilidades), y acto seguido, la búsqueda de servidores y sistemas que manifiesten estas vulnerabilidades a ser explotadas. Esta búsqueda se logra mediante programas de "escaneo" (muchos de los cuales en realidad fueron desarrollados para ayudar a los profesionales de seguridad a encontrar errores en sus propios sistemas: Satan, Saint, Nmap, Retina o Nessus, por ejemplo).

    …Y una vez que el hacker tiene sus herramientas preparadas y descubrió un servidor y/o sistema que manifiesta la vulnerabilidad que estaba buscando… es hora de su más auténtica diversión! Y tendremos un servidor más para las estadísticas forenses.

     

    La solución: profesionales informados

    Ni la más sólida formación científica, ni el más agudo talento como administrador de sistemas. Ni la experiencia de años en la configuración de servidores. Nada de esto constituye atenuante cuando se descubrió una vulnerabilidad en el software que usamos en nuestros servidores: estaremos expuestos a ser atacados a menos que parchemos los sistemas a tiempo.

    A su vez, para tener la capacidad de parchar los sistemas a tiempo, es condición imprescindible que el administrador del sistema se entere de la vulnerabilidad a la mayor brevedad posible.

    Los administradores de sistemas deben frecuentar la web, leer sitios especializados, estar suscritos a los e–zines de los Centros de Incidencias de Seguridad como CERT (www.cert.org), CERIAS (www.cerias.purdue.edu), BugTRAQ (www.securityfocus.com), etc.

    Y por sobre todas las cosas deben repasar diariamente los aburridos reportes de vulnerabilidades (donde la inmensa mayoría de las vulnerabilidades reportadas corresponden a softwares y sistemas que no hemos usado ni posiblemente usemos en nuestra vida).

     

    Dos atajos para ahorrar tiempo: AlertaHacker.com y HackerWarnings.com

    Estos sitios brindan un servicio gratuito de avisos de seguridad, que permite al administrador de sistemas configurar sus alertas (qué softwares desean monitorizar, con qué frecuencia, cómo desean ser avisados, etc.) para recibir sólo las alertas de seguridad que cada profesional requiera, según el software que esté usando en sus instalaciones.

    Estos sistemas los desarrollé personalmente hace muchos años para ahorrar tiempo evitándome leer decenas de reportes de vulnerabilidades que no me aportaban nada, y pudiendo focalizarme en la monitorización de los softwares que usaban mis clientes. Con muchas "horas de vuelo" al final me decidí a poner estos servicios a disposición del público gratuitamente para beneficio de todos. A su vez son bienvenidas las ideas para mejorarlos.

     

    Conclusión

    Hace algunos años cambiábamos para una nueva versión de software porque deseábamos usar las nuevas funciones y las mejoras que el software nuevo nos proporcionaba. Actualmente la causa más común para cambiar (o parchar) un software es para corregir algún error que comprometa su seguridad.

    Esta afirmación es válida tanto en el mundo del software libre (Apache, MySQL, PHP, Linux, etc.) como del software propietario (Windows, Oracle, etc).

    La mejor forma de lograr (y mantener) un nivel de seguridad óptima en nuestros sistemas es mantener las versiones de software actualizadas. Pero a su vez hay que discernir cuál es la causa que motivó el lanzamiento de la nueva versión del software en cuestión: si se trata de resolver un tema de seguridad (que es lo que nos ocupa) o –como antes– la nueva versión sólo agrega funcionalidades al programa.

     

    Notas

    (1) El vocablo correcto para referirse al atacante es "Cracker". En este artículo se optó por usar el vocablo "Hacker" para mantener la compatibilidad con los conceptos de un amplio público no involucrado en el tema (ver artículo "Hacker: la palabra peor utilizada en la historia de la informática")

    (2) Datos estadísticos obtenidos a partir de los análisis forenses realizados en los últimos 214 incidentes de seguridad en que el autor participó en calidad de consultor y auditor.

    (3) Algunas de las películas que han contribuído a masificar el concepto de "hacker": Tron (1982); WarGames (1983); Real Genius (1985); Sneakers (1992); Goldeneye (1995); Hackers (1995); The Net (1995); The Matrix (1999); Operation Swordfish (2001); AntiTrust (2001)

     

    Ing. Eduardo González González