domingo, 30 de enero de 2011

Los Desarrolladores son los Culpables.


Ok, ok, no quiero a decenas de desarrolladores comentando este post con mensajes de odio ;). Sólo estaba pensando el otro día lo mucho que criticamos a los usuarios por ser “el eslabón más débil”, por “no tener ni idea” o “ser poco inteligentes”.

Pero si se ponen a pensar, realmente la mayoría de las amenazas que pululan en Internet, en las redes internas y sistemas son originados o facilitados por las vulnerabilidades presentes en sistemas operativos y aplicaciones. Tenemos al fulano que le roban su dinero al usar banca en línea, o la computadora que es usada para ser parte de una bot y más recientemente, un ataque a los sistemas de una planta nuclear.

Inyección de SQL, cross site scripting, troyanos y gusanos que aprovechan debilidades de software para concretar sus objetivos. Un reciente ejemplo fue la conferencia de BlackHat de este año que estuvo nutrida por demostraciones de debilidades…en software: http://tinyurl.com/BlackH11.

Sí claro, ya que se explota la debilidad de software, muchas veces el usuario ayudará a finalizar el ataque. Sin embargo piensen en un mundo imaginario donde el software no tiene vulnerabilidades: cuántos ataques se podrían llevar a cabo? Se me ocurre el phishing donde el usuario da su usuario/contraseña en un sitio web falso. No intervino ninguna debilidad de software…el usuario es el “culpable”.

Pero salvo en algunas excepciones, realmente el problema de raíz es el software que si bien funciona, tiene buffer overflows y demás imperfecciones que hacen posible en primera instancia que un ataque sea exitoso. Hay desarrolladores detrás de Adobe Reader, Windows, Adobe Flash, Java JRE, QuickTime, Linux, Safari, Office o Mac OSX…todas ellas con debilidades. Sin mencionar las aplicaciones que se hacen en las corporaciones e instituciones de todo el mundo.

Y no siendo suficiente el hecho de meterle debilidades al software, los desarrolladores y diseñadores no le agregan la funcionalidad de actualización automática a la aplicación (esto último ya ha estado cambiando en Windows y algunas aplicaciones).

En fin, lo anterior se lo comenté a un desarrollador durante una plática y me dijo:

a) El aprendizaje que recibí y recibo para codificar no involucró la parte de seguridad. La escuela no lo hizo y mi empresa tampoco me da una capacitación al respecto, sólo me queda hacerlo por mí mismo…sin embargo mis empleadores no valorarían esa inversión de tiempo porque lo que quieren es que la aplicación jale. Sinceramente dentro de las empresas lo que se busca es sacar aplicaciones funcionales en el menor tiempo posible, así es que eso de “la seguridad” realmente es un gasto de tiempo indeseable.

b) Es fácil criticar la inseguridad de mis aplicaciones web que desarrollo, pero enséñame tres aplicaciones de más de 5,000 líneas de código que esté exenta de errores y entonces me callo. Desarrollar software seguro es difícil, y entre más complejo sea la aplicación, más difícil es darse cuenta de ese tipo de errores. Enséñame un sistema operativo sin bugs que se ejecute en una computadora moderna…eso no existe hoy y dudo que pueda pasar en el mediano plazo.

Ahhhhhh verdad?. La cosa no está tan fácil ¿Los desarrolladores tienen la culpa? Tú dime…al parecer el problema es más complejo que apuntar a “los desarrolladores”, a “los de seguridad” o a “los usuarios”. Dejando de lado quién tiene “la culpa”, pienso que los desarrolladores deben de ver el hecho de codificar aplicaciones con una noción de seguridad en mente como un “plus” o un extra que pueden incorporar a sus destrezas y verlo como una ventaja competitiva, en lugar de verlo como “pérdida de tiempo” o “si a mis jefes no les importa, para qué aprenderlo?”.

Si eres desarrollador piensa en lo que dije…es posible que puedas verlo como una habilidad que te dará una ventaja competitiva? Si eres empleador de un desarrollador, anímalo a que se capacite o aprenda esta habilidad y premia el hecho de que no sólo se hagan aplicaciones funcionales sino lo más seguras posibles.

Como muchas veces, las cosas no van a cambiar si dejamos que “el gobierno”, “la regulación”, “el jefe”, “los de seguridad” o “el vecino” hagan algo al respecto. ¿Qué puedes hacer desde tu trinchera?

(Googleando me encontré con esta página que habla del tema…parece que no soy el único en poner este tema sobre la mesa: http://www.nextgov.com/nextgov/ng_20100216_8606.php).

Nota: a mí en la Universidad no me enseñaron codificación segura…se omitió prácticamente de los temarios.