- Evolución del panorama de seguridad
informática en los últimos
años - Ciclo
de vida de un software, su explotación y (deseablemente)
su actualización y/o parchado - EL
camino más corto a la explotación de
sistemas - La
solución: profesionales informados - Notas
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 operativo 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.
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.
(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 contribuido 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
(*)
(*) Consultor en Sistemas de Seguridad