Estas aquiContenido / Código inseguro: ¿quién responde? (I)

Código inseguro: ¿quién responde? (I)


Porluthier- Publicado el12 Octubre 2005

Desde hace tiempo viene instalándose en muchos usuarios de ordenadores la convicción de que alguien debería ser responsable de los desaguisados que produce la falta de seguridad en los programas, pero no todo el mundo tiene claro a quién culpar.

Si convenimos en dejar libres de toda sospecha al clima, el agujero de la capa de ozono y el Opus Dei, sólo nos quedan dos presuntos culpables: quien produce el código y quien lo comercializa (y eso suponiendo que sea posible diferenciarlos, que puede ser mucho suponer).

Howard Schmidt, presidente y CEO de la consultora de seguridad R&H, ha destapado la caja de los truenos en SecureLondon October 2005 [1], al situar la patata caliente en las manos del programador [2], si bien encuentra algunos factores para justificar su presunta falta de pericia, como la falta de preparación respecto a la seguridad del software que se obtiene de las universidades...

¿Qué pensáis vosotros? ¿De la madre -o el padre- quién os acordáis cuando algo falla? ¿Echáis la culpa al currito programador o a la empresa que pone el programa en el mercado?

Sin ánimo de inclinar la balanza hacia un lado u otro yo me pregunto: ¿no debería haber controles de calidad sobre el software producido? De eso modo las responsabilidades del programador se depurarían dentro de su empresa, siendo ésta responsable subsidiaria frente al usuario.

En cualquier caso, vosotros tenéis la palabra...

  1. SecureLondon October 2005
  2. Developers 'should be liable' for security holes [ZDNet UK]
  3. Ver también Código inseguro: ¿quién responde? (y II)
Etiquetas

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).

Hasta hace un tiempo los programadores se llamaban comunmente "Informáticos" o Licenciados en Informática, para los más técnicos. Ahora han pasado a denominarse Ingenieros Informáticos, que parece que les de más prestigio. En concreto se comparan con la Ingeniería clásica y la Arquitectura ("arquitectura/ingeniería del software", "ingeniero informático" y otras expresiones varias lo corroboran).

Pues bien, hace ya mucho tiempo, desde los romanos, los edificios de los arquitectos y los puentes y demás construcciones de los ingenieros no se caen todos los días, varias veces al día. ¿Pero que pasa con los programas que hacen los Ingenieros Informáticos? La comparación es realmente odiosa...

Está muy claro que los estándares de calidad de las ramas de las ingenierías clásicas distan mucho, para mejor, de sus homólogos informáticos. Ahí es donde está el problema. ¿Control de calidad? Realmente se hace muy poco y/o bastante mal, los resultados cantan.

Sin duda la "Ingeniería Informática" es muy muy joven en comparación con las clásicas, y eso hace que siga siendo más un arte que una ciencia (ingeniería en realidad, pero no quiero repetirme tanto). Yo creo que ahora estamos en el periodo de transición, y que de aquí a unos años (¿diez o veinte? no se...) los programas serán más robustos y predecibles (espero ;-).

Saludos, Bonzo.

Los revolucionarios de hoy son los conservadores del mañana, pues la vida pasa y los hombres, al hacernos viejos, nos quedamos atrás...

Los revolucionarios de hoy son los conservadores del mañana, pues la vida pasa y los hombres, al hacernos viejos, nos quedamos atrás...

eso, te has adelantado con casi los mismos argumentos por pocos segundos ;)

Me parece que hace demasiado tiempo que los informaticos se escudan en aquello de "es imposible hacer un programa totalmente seguro" o "es demasiado complejo como para ser seguro". El comportamiento de un ordenador (cuando no hay un fallo hardware) es completamente determinista, asi que no hay lugar para el fallo si este no ha sido provocado, intencionadamente o no. Cierto que requeriria mucho mas tiempo de desarrollo, pero nadie piensa en un un coche con el motor de cartonpiedra "porque no se puede hacer de otra forma"

Por otro lado los informaticos hace varios años que adquirieron la condicion de ingenieros, y una de las consecuencias de las ingenierias es que el ingeniero que firma un trabajo se hace responsable de él. El arquitecto asegura que su edificio no se cae, el de caminos que el puente aguantara tantos años, los electronicos que el diseño se ajustara a ciertas especificaciones. Para eso se supone que han estudiado durante muchos años, y por eso la responsabilidad ante un fallo les corresponde. ¿Por qué iba a ser diferente un Ingeniero Informatico?

Pero claro, un diseño e implementacion bien desarrollados llevaria mucho tiempo y dinero, y entre los propios informaticos se tiende a magnificar la idea del programador solitario; alguien quien, incluso trabajando en equipo, hace solamente su parte del trabajo confiando en el que el resto de la aplicacion funcione bien y esperando el mismo trato reciproco. Y paradojicamente, los informaticos "de carrera" proclaman a los 4 vientos que ellos no son "picacodigos", sino diseñadores de aplicaciones.

La solucion, claro, seria encontrar el equilibrio justo entre el precio por aplicacion bien desarrollada y las especificaciones de esa aplicacion. En el resto de ingenierias lleva tiempo haciendose. El coste de procesador es aproximadamente 4$, el resto de los 800 $ que cuesta un ultimo modelo se dedica a los gastos de diseño y prueba. En informatica esto se puede llevar al limite porque el coste de duplicacion es practicamente 0.

¿El problema? Pues que evidentemente el precio de un buen programa subiria mucho (¿nadie se ha preguntado porqué el Autocad o el Protel cuestan tantos miles de euros una simple licencia?), y que el software libre estaria en serio peligro porque ¿quien estaria dispuesto a firmar un producto sin cobrar un duro?

Este ultimo punto, el del software libre, es el que, en mi opinion, pone la puntilla a todo el asunto. A todo el mundo le gusta la idea romantica que subyace de ese movimiento. Mucha lucha clasista, mucho de que el conocimiento debe ser de todos, gente que no tiene que ver con el movimiento "sintiendo" que es algo que debe hacerse, que sus ideales son los correctos. Por eso creo que desde la propia Internet no se exige una responsabilidad a los programas libres; casi se les perdona cualquier fallo por el hecho de que es Software Libre. Ademas, son ellos los que levantaron internet y los que mantienen los sitios ¿por qué iban a tirarse piedras sobre su propio tejado?

Pero les propongo un reto, piensen en un proyecto de codigo abierto que haya triunfado. ¿Apache? ¿Freebsd? Ambos apoyados en fundaciones que reciben donaciones millonarias para pagar a sus ingenieros permanentes y sus costes de hardware. ¿Linux? Torvalds pagado solo para continuar el desarrollo, los mantenedores de las distintas versiones colocados por empresas como IBM, Sun o Novell para asegurarse su cuota de influencia (¿no creeran de verdad que apoyan a linux solo porque mola, no?), equipos de desarrolladores de estas mismas empresas dedicados a sacar mas y mas parches. No, evidentemente no son chavales cambiando el mundo desde el garaje de su casa, como dice el topico. Por supuesto que tambien existen proyectos sin dinero por detras, pero me concederan que salvo honrosas excepciones, la mayoria son programas que funcionan arbitrariamente bien (o mal) dependiendo de factores que parecen solo remotamente relacionados con ellos, siendo frustrante encontrar la causa del fallo.

Bueno, creo que el rollo ya me ha quedado suficientemente largo ;) Como resumen, yo haria a los informaticos responsables de sus creaciones, y acabariamos con muchos males.

PD: he olvidado a conciencia el tema del intrusismo profesional dentro de la informatica. Eso daria para otro post igual de largo, y empiezo a tener hambre ;)

Y creo que los resultados de la encuesta empiezan a darte la razón...

Hay un cierto porcentaje que elige "esas cosas pasan", lo que no deja de ser llamativo. Yo les pediría que apoyaran su voto con comentarios, porque me sorprende mucho que en una sociedad tan litigadora como la actual, haya más de un 10% de personas que opinen así.

¿Qué les parecería que otros sistemas tanto o más complejos estuvieran tan llenos de fallos como los programas? que se derrumbaran las casas porque sí, porque "esas cosas pasan"... ¿Acaso no pedirían cabezas?

Además tal vez cuando se exija la firma de proyectos software con las mismas responsabilidades que las que se exigen a otros ingenieros, se producirá por fin una equiparación de funciones.

Como "ingeniero informático" no puedo dejar de sentirme muchas veces como un simple programador. Y en multiples ocasiones, sobre todo cuando estas empezando tu carrera en este mundo, el ser ingeniero informático se puede llegar a convertir en una losa a la hora de encontrar tus primeros trabajos. Y creo que todos sabeís a que me refiero.

Colegios oficiales de ingenieros informáticos y leyes de calidad del software ya!. Menos leyes P2P y más leyes reales de calidad del software.

[Lo siento: esto pretendía seguir al comentario de Bonzo]

... que además nunca se me había ocurrido considerar, pero que tiene mucho, mucho sentido.

Probablemente los programas de hoy son el equivalente a aquellos primeros coches o aviones de la transición siglo XIX-XX, y algún día serán vistos con idéntica condescendencia y -quizás- hasta admiración (algo que ya empieza a pasar con los programadores-operadores que utilizaban hace unas décadas tarjetas perforadas).

En muchos casos la comprobación minuciosa de un programa llevaría el doble de tiempo que la propia realización y estamos de acuerdo que en el mercado esto no se vería con buenos ojos. Existen métodos para verificar matematicamente el comportamiento de un programa, pero si realizásemos ese trabajo tan minucioso los costes del software se dispararian hasta precios desorbitados.

Por otro lado un programa no es como un edificio, es cierto los ordenadores son máquinas completamente deterministas, pero el problema esta en la interacción con el resto del software, es decir, en algunos casos la instalación de un determinado software o de alguna configuración puede provocar que algo que en teoria funcione no funcione correctarmente, casos.. pues no es lo mismo ejecutar algo en Windows XP que Windows XP SP1 o SP2(siento la publicidad). Es decir para asegurar el completo funcionamiento de un software haría falta controlar por completo el software y la configuración que tiene el ordenador.

En muchos casos esto se puede dar, como en sistemas empotrados, dónde el entorno esta muy controlado, pero como llevar esto a entornos empresariales o de escritorio tan heterogéneos como los que existen hoy en día¿?. Realmente creo que resulta, no voy a decir imposible, pero sí muy difícil

Además de todo esto esta el usuario, la verdad es que ahora mismo no me puedo imaginar una interfaz, cualquier interfaz que sea capaz de, en el 100% de los casos, solventar los errores provocados por los propios usuarios, datos mal introducidos, un manejo deficiente del programa (qué de esto también hay), esta claro que hay que diseñar las interfaces de los programas para que estas cosas no ocurran e intentar ayudar al usuario, pero creo que es muy difícil hacerlo sin convertir el programa en un gran asistente (que una cosa son 10 ventanitas de asistente pero un programa grande cuantas ventanas tendría que tener¿?).

Así que creo que se esta trabajando mucho en solventar estos problemas del desarrollo del software, que no de la informática, informática no solo es programar, existen métodologias de trabajo que intentan minimizar estos problemas.

Resumiendo se trabaja y mucho en este aspecto, pero no podemos esperar que el software sea como un edificio, del cual se sabe con mucha exactitud su localización tipo de terreno dónde se construye, el entorno etc.. En el software esto es lo que no se puede garantizar. Como mucho se podrá garantizar que este software funciona con este máquina en concreto, con este sistema operativo y con esta configuración, todo lo que conlleve un cambio en alguno de estos parámetros dejaria fuera la garantia, y aún con todo tampoco podría garantizar que el sistema operativo sobre el que trabaja sea perfecto y no tenga fallos.

Hace algun tiempo que vengo leyendo sobre la idea de que alguien debe responder por los problemas que causan los errores en el sofware y me parece una idea de lo más coherente con otras ramas de la tecnica, como se viene indicando en anteriores comentarios. Opino que en el caso del sofware comercial debería ser la empresa la que responda de los errores, pues normalmente no solo una persona la que diseña y/o codifica una aplicación, sino un determinado grupo de trabajo a expensas de una determinada empresa.

Pero en lo que yo queria centrarme es ¿A que nivel se podrían depurar las responsabilidades? Quiero decir, será realmente posible y factible que Gran Empresa Multinacional de Software S.A. se responsabilice como deberia de los gastos y problemas que sus productos defectuosos acarreen a Pequeña Empresa de Barrio S. L. o Pequeña Empresa de Barrio S. L. se perderá en medio de la lucha contra un enorme bufete jurídico en un sinfin de pleitos. ¿Estarán al alcance de todos las contraprestaciones por los fallos en el software? ¿O solo los más poderosos podrán exigirlas y acceder a ellas?

Teniendo en cuenta un entorno en el cual mi aplicación va a interactuar con otras, cuyo código probablemente sea cerrado (es decir, cajas negras), sería un poco sucida firmar algo.

Sería comparable a ser arquitecto y construir un edificio en un mundo dominado por la magia. En cualquier momento, al edificio de al lado del tuyo le podrían salir piernas y brazos y podría liarse a mordiscos con tu edificio.

No creo que debamos buscar al «culpable», deberíamos orientar la búsqueda hacia el «responsable»: al responsable de liberar un producto a la venta sin cumplir con los mínimos controles de calidad y funcionamiento.
De todos modos este "ovillo" tiene demasiadas puntas para comenzar a jalar, aunque estimo que ninguna nos llevará al meollo, es decir al centro del problema, lo que no es casual (no creo en las casualidades sino en las causalidades), ni arbitrario sino pensado y desarrollado con ese fin.
¿Cual? Este mismo que aquí se discute y comenta, y que nos lleva a caminar en círculos hasta el agotamiento y por lo tanto el abandono cuando entramos en las tinieblas de la incertidumbre crónica.

Hace pocas horas respondí a un usuario sobre los antiespías y otros programas al tono.
Se preguntaba por qué uno de ellos (RegAuditor), descubría cosas que los otros no y viceversa. Entre el presente comentario y el anterior, concluí un pensamiento de larga data sobre una de las posibles causas y que a continuación arriesgo: ¿Puede que haya un acuerdo, tácito o explícito, entre los desarrolladores sobre qué encontrará A y qué no? ¿Al igual que B consultará con C para acordar con A cómo se deberán repartir los méritos?
De hecho, si A encontrara todo, ni B ni C tendrían cabida ni mercado por lo tanto mi sospecha conserva su cabellera, tan traída de los pelos no parece estar.

Ejemplo que se reitera con los antivirus: "este si hasta... pero aquél no porque... y este otro tampoco ya que..." ¿Alguien se preguntó alguna vez el volumen de dinero que maneja esta "industria"? ¿Y qué sucedería si "los sospechosos de siempre" se aburren de este juego sin fin, ni fines? Y no me digan a la ligera "Sí, persiguen un fin...porque bla, bla y recontra bla...", porque ese "fin" los supuestos malvados "por gusto" muy pocas veces, o ninguna, lo presencian ¿Cuál es el sentido de una broma si no estamos presentes para divertirnos con su resultado?

No creo que exista la maldad por la maldad misma, siempre hay un fin concreto detrás de ella, y si no lo hubiera su autor es carne de diván o directamente de camisa de fuerza y celda acolchada.
Paradójicamente, toda maldad -mal que nos pese y exceptuando la psicopatía- tiene su justificativo, su fin y su medio para ejecutarla; y evitemos ser ingenuos: no es usual que el medio "trabaje" a cara descubierta.

Si desconocemos las estrategias de comercialización, basadas en crear primero la necesidad para "satisfacerla" después con el producto fabricado de antemano (a la inversa de los viejos tiempos), si no aprendemos a leer aquello que no está escrito, y tragamos al pie de la letra lo dicho por los creativos y redactores publicitarios, seguiremos condenados a la ignorancia perpetua, jamás descubriremos al responsable, no al culpable.

Pequeña gran diferencia entre uno y otro: soy culpable porque desarrollé desde cero un programa de 12 mil líneas para automatizar la producción de salchichas por orden del departamento de sistemas de la empresa "Prgs S. A.", pero por carecer de ayuda o tiempo deslicé algunos errores en el código y la máquina terminó fabricando salamines.
Ahora bien ¿quién testeó mi programa cuando escribí la última línea? ¿Alguien que no sea yo mismo -pecado capital en programación- hizo una corrida virtual para verificar su funcionamiento? No, nadie: el gerente de sistemas, el gerente de ventas y el gerente de contaduría necesitaban con urgencia entregar el salchichero programa con el menor gasto posible.

Culpable de los errores: el programador, en este caso, yo.
.-Culpa: Imputación a alguien de una determinada acción como consecuencia de su conducta.

Responsable de los errores: la plana mayor en pleno
.-Responsable: 1) Obligado a responder de algo o por alguien (o sea por mí: "el culpable").

.-2) Dicho de una persona: Que pone cuidado y atención en lo que hace o decide (el Gte. de sistemas que decidió dejarme solo en el desarrollo del programa y su testeo).

.-3) Persona que tiene a su cargo la dirección y vigilancia del trabajo en fábricas, establecimientos, oficinas, inmuebles, etc. (La gerencia general, que no se hizo cargo de la contratación de testers ni ayudantes).

Traslademos este ejemplo a las pequeñas, medianas y grandes empresas de software -¿y por qué no hardware también?- y la curva de errores e inseguridades irá ascendiendo en forma directamente proporcional a la complejidad y tamaño de la empresa o a sus necesidades económicas.

Para terminar: ¿Se han tomado el trabajo de leer detenidamente los "CLUF", "Readme first", "Disclaimers" y otros documentos incluidos en los programas que compran a los que contadas veces les falta el nunca bien comprendido "As is"? (Se los traduzco: "arreglatelas como puedas, nosotros nada tenemos que ver").
Si alguien lo hizo, y los comprendió e interpretó cabalmente, habida cuenta tendrá que el usuario es el principal "sospechoso" ante cualquier falla, y el segundo en línea, cualquiera: el hardware, la prima Eulogia, los vecinos de la esquina, el gato que gusta dormir sobre el monitor, o la contaminación ambiental; y por último, la empresa, siempre y cuando las políticas sobre garantías en el país de aplicación "no digan lo contrario", esto sí me causa risa.

Quizás por esto el mundo está lleno de "culpables" pero vaya a saber por qué extrañas razones nunca se busca a los "responsables".

Víctor Hugo

Ví­ctor Hugo

Patrocinadores

Kriptópolis alojado en
Zilos-Veloxia Network

Tu mejor defensa:
Bufet Almeida