La comprobación de manchas es una característica de algunos lenguajes de programación de computadoras , como Perl [1] y Ruby , [2] diseñada para aumentar la seguridad al evitar que usuarios malintencionados ejecuten comandos en una computadora host. Las comprobaciones de corrupción destacan los riesgos de seguridad específicos asociados principalmente con los sitios web que son atacados mediante técnicas como inyección SQL o enfoques de ataque de desbordamiento de búfer .
Descripción general
El concepto detrás de la verificación de corrupción es que cualquier variable que pueda ser modificada por un usuario externo (por ejemplo, una variable establecida por un campo en un formulario web ) representa un riesgo potencial para la seguridad. Si esa variable se usa en una expresión que establece una segunda variable, esa segunda variable ahora también es sospechosa. La herramienta de verificación de contaminación puede luego proceder variable por variable formando una lista de variables que están potencialmente influenciadas por entradas externas. Si alguna de estas variables se usa para ejecutar comandos peligrosos (como comandos directos a una base de datos SQL o al sistema operativo de la computadora host ), el verificador de corrupción advierte que el programa está usando una variable contaminada potencialmente peligrosa. El programador de computadoras puede entonces rediseñar el programa para erigir un muro seguro alrededor de la entrada peligrosa.
La verificación de la contaminación puede verse como una aproximación conservadora de la verificación completa de la no interferencia o el concepto más general de flujo de información seguro . [3] Debido a que el flujo de información en un sistema no puede verificarse examinando un solo rastro de ejecución de ese sistema, [4] los resultados del análisis de contaminación reflejarán necesariamente información aproximada sobre las características del flujo de información del sistema al que se aplica. [5]
Ejemplo
El siguiente código peligroso de Perl abre una gran vulnerabilidad de inyección SQL al no verificar el valor de la $name
variable:
#! / usr / bin / perl mi $ nombre = $ cgi -> param ( "nombre" ); # Obtener el nombre del navegador ... $ dbh -> { TaintIn } = 1 ; $ dbh -> execute ( "SELECCIONAR * DE los usuarios DONDE nombre = '$ nombre';" ); # Ejecutar una consulta SQL
Si la comprobación de taint está activada, Perl se negaría a ejecutar el comando y saldría con un mensaje de error, porque se está utilizando una variable corrupta en una consulta SQL. Sin la verificación de la corrupción, un usuario podría ingresar foo'; DROP TABLE users --
, ejecutando así un comando que borra toda la tabla de la base de datos. Mucho más seguro sería codificar el valor contaminado de $ name en un literal de cadena SQL y usar el resultado en la consulta SQL, garantizando que no $name
se evaluará ningún comando peligroso incrustado . Otra forma de lograrlo es usar una declaración preparada para desinfectar toda la entrada de variables para una consulta.
Una cosa a tener en cuenta es que Perl DBI requiere que uno establezca el TaintIn
atributo de un identificador de base de datos , así como habilitar el modo de taint para verificar las cadenas SQL de uno. [6]
Historia
Perl admitió la contaminación en scripts setuid desde al menos la versión 3.0 (lanzada en 1989), [7] aunque no fue hasta la versión 5.0 (lanzada en 1994) [7] que se introdujo el -T
conmutador [1] integrando la contaminación en un solo tiempo de ejecución.
En 1996, Netscape implementó la contaminación de datos en JavaScript del lado del servidor en Netscape Communications Server , [ cita requerida ] así como en el lado del cliente para Netscape Navigator 3. [8] Sin embargo, dado que el soporte del lado del cliente se consideró experimental, se envió deshabilitado (requiriendo intervención del usuario para activar), y los autores de la página requeridos para modificar los scripts para beneficiarse de ella. Otros proveedores de navegadores nunca implementaron la funcionalidad; tampoco lo hizo la competencia principal de Communications Server, el (entonces) nuevo Internet Information Server de Microsoft .
Referencias
- ^ a b "perlsec - seguridad de Perl" . Equipo de desarrollo de Perl 5 . Consultado el 20 de mayo de 2012 .
- ^ Programación de Ruby --- La guía pragmática del programador . Addison Wesley Longman. 2001, págs. 253 (capítulo 20).
- ^ A. Sabelfeld y AC Myers, "Seguridad del flujo de información basada en el lenguaje", IEEE Journal on Selected Areas in Communications , 2003.
- ^ J. Ligatti, L. Bauer, D. Walker. "Editar autómatas: mecanismos de aplicación de las políticas de seguridad en tiempo de ejecución". Revista Internacional de Seguridad de la Información , 2005
- ^ T. Terauchi y A. Aiken. "El flujo de información seguro como problema de seguridad". En el 12 ° Simposio Internacional de Análisis Estático , septiembre de 2005.
- ^ "DBI - Interfaz independiente de la base de datos para Perl" . Consultado el 29 de agosto de 2020 .
- ^ a b "perlhist - los registros históricos de Perl" . Equipo de desarrollo de Perl 5 . Consultado el 29 de agosto de 2020 .
- ^ Flanagan, David (1997). JavaScript: la guía definitiva (2ª ed.). O'Reilly y asociados. pag. 321. ISBN 9781565922341.
[...] el modelo de seguridad de contaminación de datos es experimental en Navigator 3.0 y no está habilitado de forma predeterminada. Sin embargo, se espera que sea el modelo de seguridad predeterminado en la versión 4.0 de Navigator.
enlaces externos
- Directrices del W3C sobre scripts CGI de comprobación de corrupciones
- perlsec - documentación de seguridad de Perl