Los más perspicaces habréis notado una pequeña “remodelación” en el blog desde hace unos días. Se han incorporado dos RSS (sindicaciones Web) de las páginas de milw0rm y Security Focus. En las mismas se pueden ver los 3 últimos exploits publicados y las 3 últimas vulnerabilidades publicadas, aunque cómo habréis sospechado no van a la par ni corresponden la una (vulnerabilidad), con el otro (exploit), aunque están muy relacionados.
¿Habéis programado alguna vez? La mayoría estoy seguro que si, para los que no lo habéis hecho nunca programar es introducir una serie de ordenes al procesador para que las ejecute según nuestra necesidad. El ordenador como todos sabéis es tonto (o al menos el mío), por lo que hay que decirle todo paso a paso, y es más, cuando se le dice que haga algo y no puede –por falta de recursos, por que no sabe como, por que no habla tu idioma da error. ¿Qué ocurre en ese momento? Que el proceso que tenía en ese momento el control del procesador lanza una excepción y pierde el control, dando ese control a otro proceso, es una explicación bastante burda, pero estoy seguro que me entendéis. Os pongo un ejemplo:
Int a, b = 2;
Int c = 0;
a = a + b; (a = 2 + 2; a = 4)
a = a / c; (a = 4 / 0; a = error) à Excepción
En la mayoría de los casos el desarrollador ya tuvo en cuenta estas posibles excepciones, e incluía trocitos de código encargado de capturarlas y de emitir un error en pantalla, que en este caso sería un:
printf (“ Error de división por 0, la variable C no puede ser 0”)
En este caso ha quedado muy claro, son 4 líneas y es un error bastante común. Otro tipo de errores típicos son el buffer overflow, muy parecido al desbordamiento de pila , etc. etc. En todo caso son errores de programación por casos no contemplados (de ahí que diga que mi ordenador es tonto).
Una vulnerabilidad por tanto es un caso “no contemplado” (o si, pero que no se solucionó al fin y al cabo), y un exploit es un trozo de código que se aprovecha de esos casos “no contemplados” para provocar un error en un proceso, introducir su propio código y hacer lo que querramos, por ejemplo acceder a la consola de cmd del equipo atacado, lanzarle un Internet Explorer, o provocarle una denegación de servicio.
Por tanto un pirata informático es una persona que, teniendo grandes conocimientos de sistemas operativos, programación, etc. descubre algunos de estos “casos no contemplados” para provocar errores en el software, y adueñarse de otros sistemas (las motivaciones pueden ser muy diversas claro). A decir verdad es difícil ser pirata, hace falta bastante dedicación, estar un poco loco, y ser muy inteligente, por eso considero que se pueden contar con una o dos manos el número de verdaderos "piratas" que hay en el mundo. El resto se basa (nos basamos) en el trabajo de terceros, vemos exploits que otros han desarrollado, probamos vulnerabilidades que nos han contado en la carrera en nuestros propios desarrollos, o cosas parecidas. Para colmo hoy en día todo está automatizado, ya sea Nessus, ya sea Nmap, ya seas Paros Proxy, ya sea Metasploit:
Metasploit: Somos malotes y lo sabemos!
Pero de este hablaremos en próximos capitulos!
Happy Sunday!