Está en la página 1de 3

Seguridad en Software

Nikole Yanez Amaya octubre, 2013

Seguridad en aplicaciones
En la actualidad toda nuestra vida depende de alg un Software: dinero, telecomunicaciones, educaci on, entretenimiento, transporte, etc. Aunque no usemos alguna tecnolog a de forma directa, siempre seremos personas usuarias de alg un Software de forma indirecta y nos veremos afectadas por el mismo: los ministerios, la instituciones p ublicas, educativas, nancieras, empresas privadas; b asicamente todo nuestro entorno depende de alg un Software. Si comprendemos esto entonces podemos poner en perspectiva la importancia de la seguridad del Software que desarrollamos o mantenemos. Creo que la discusi on del tema en el foro ha evolucionado y ha resultado de provecho. Creo que los compa neros y compa neras ya han expuesto de forma clara y concisa el tema de la seguridad. En particular, creo que la intervenci on de Zamot ofrece un buen panorama sobre la importancia de la seguridad en las aplicaciones de Software. Quiero dar un ejemplo muy concreto de una pr actica no segura que desgra ciadamente he observado muy com un en programaci on. Este problema es muy simple, y se da cuando se utiliza cualquier tipo de entrada (una fuente de datos, entrada de usuario, u otra base de datos) directamente en una base de datos. Si la entrada no est a correctamente validada desde una perspectiva de seguridad, a diferencia de una perspectiva de aplicaci on (aplicaci on: entrada no vac a, seguridad: entrada que no tenga c odigo da nino), podemos comprometer toda la informaci on que almacenamos en nuestra base de datos. Cuando alguna persona malintencionada aprovecha este error, se le llama SQL Injection. Asuman que est an programando alguna aplicaci on web. En dicha aplicaci on crean un formulario para que un nuevo usuario pueda registrarse. En dicho formulario tendr an un campo en el cual el usuario debe ingresar el nombre de usuario que desea elegir. Seguramente deberemos vericar que dicho nombre de usuario no exista previamente, que est e disponible. Por lo tanto, deberemos hacer una llamada a la base de datos para vericar si existe dicho nombre de usuario, y seguramente encontraremos una l nea como la siguiente: statement = "SELECT * FROM users WHERE name = " + userName + ";" userName ser a una variable que seguramente tomamos directamente del campo del formulario. Sin embargo, que pasa si el usuario ingresa la siguiente cadena de texto: algunusuario; DROP TABLE users; -Tendremos entonces una variable statement: SELECT * FROM users WHERE name = algunusuario; DROP TABLE users; -- ; Asumamos que el doble gui on -- permite crear una comentario en nuestro sistema de base de datos, como es en el caso de MySQL. Otras bases de datos seguramente tambi en tendr an su sintaxis para comentarios en los statements.

Si ejecutamos la declaraci on anterior en nuestra base datos, y si por error u omisi on el usuario de la base de datos que realiza la consulta tiene permisos de hacer DROP de una tabla, entonces habremos perdido nuestra tabla de usuarios. El SQL Injection no s olo permite eliminar datos, pero tambi en revelar los mismos, dependiendo de la sentencia SQL que escriba el atacante. El atacante podr a lograr acceso a toda la informaci on de los usuarios, sus correos, claves (si est an en texto plano, sumando el riesgo de duplicidad de clave con la del correo), n umeros de sus tarjetas de cr edito, etc. Si utilizamos alg un framework de desarrollo web, como por ejemplo Drupal, existen funciones que permite ltrar la entrada de forma que garanticemos que sea segura, ya sea para ser ejecutada en una base de datos (SQL Injection) o ser mostrada en nuestro sitio web (Javascript Injection). En el ejemplo de Drupal (PHP), una llamada insegura ser a1 : mysql_query("UPDATE mytable SET value = ". $value ." WHERE id = ". $_GET[id]); Y la versi on segura ser a:

db_query("UPDATE {mytable} SET value = :value WHERE id = :id", array(:value => $value, :i ametros antes El m etodo db query realiza todas las vericaciones de los par de construir el query. Para nalizar, me gustar a compartir una XKCD, referente precisamente al problema expuesto: Saludos

1 http://www.cameronandwilding.com/blog/pablo/10-most-critical-drupal-security-risks