Vous êtes sur la page 1sur 22

Sinopsis: Se trata de una obra introductoria a los conceptos de seguridad en las aplicaciones y a los conceptos de codificacin segura.

Utilizando los principios de Microsoft Solutions Framework como marco de trabajo y las recomendaciones oficiales de buenas prcticas, se recorre el ciclo de vida de una aplicacin, haciendo especial hincapi en las prcticas de seguridad, los modelos de ataques, y las formas correctas de prevencin. Los Cuadernos Tcnicos de dotNetMana son una serie de pequeos libros enfocados a temas concretos para programadores y arquitectos de software de la plataforma .NET. Cubren el hueco existente entre artculos muy especficos en una revista especializada como dotNetMana o los grandes libros sobre temas genricos.

Marino Posadas es Redactor Jefe de dotNetMana.Trabaja como Consultor y Program Manager en Alhambra-Eidos y es Microsoft Most Valuable Professional en Visual C#, adems de titulado MCSD, MCAD, MCT y MSFP. Antes de esta obra, ha colaborado con varios compaeros de trabajo en la elaboracin de otros cuatro ttulos, y esta es su tercera obra en solitario. Conferenciante en diversos eventos organizados por Alhambra-Eidos, Microsoft y varias universidades espaolas y extranjeras, se interes por .NET Framework desde las primeras versiones alfa y mantiene una Web de soporte de sus actividades en el sitio www.ElAveFenix.net

Luarna Programacin segura con .NET Framework Marino Posadas De esta edicin: 2009, Luarna Ediciones, S.L. www.luarna.com Madrid, junio de 2009 ISBN: 978-84-92684-36-3

Versin: 1.0 (19-06-2009)


Cualquier forma de reproduccin, distribucin, comunicacin pblica o transformacin de esta obra solo puede ser realizada con la autorizacin de sus titulares, salvo excepcin prevista por la ley. Dirjase a CEDRO (Centro Espaol de Derechos Reprogrficos, www.cedro.org) si necesita fotocopiar o escanear algn fragmento de esta obra.
Edicin en papel Primera edicin en papel: 2006 Seguridad en .NET Framework Consideraciones de seguridad en el ciclo de vida de las aplicaciones Marino Posadas Netalia, S.L., 2006

Seguridad en .NET Framework


Consideraciones de seguridad en el ciclo de vida de las aplicaciones

Marino Posadas

A Milagros, que siempre me anima en las labores de escritura, y me descarga de otras ms cotidianas, para hacer que esto sea posible. A Paco Marn y Pilar Prez, editores y sin embargo amigos. No se lo dedico por lo primero sino por esto ltimo. Es mucho ms raro de encontrar. A mi otro amigo, Paco Morero. Es un genio de la otra plataforma (J2EE), y sin embargo, me sigue considerando tan de fiar como hace 25 aos. Todo un mrito! A mis sobrinos Fernando, Sara, Ana, Paula, Pablo, Javier, Adrin, Irene, Luis y Juan Jos, y a Silvia y Clara (sobrinas adoptivas), de quienes soy su primer proveedor de software. Ellos me recuerdan los aspectos ms divertidos de la informtica. A Ernesto Manrique, nico familiar que de momento ha seguido mis pasos y va camino de superarlos con creces. Que veamos muchos ms!

Agradecimientos
Hay muchos a los que tengo que agradecer diversos aspectos de esta obra, pero intentar resumirlo: A Alfonso Rodrguez, Javier Izquierdo, Alberto Amescua, David Carmona y David Salgado, de Microsoft Ibrica, por su continuado apoyo y fe en mi trabajo. A Luis Miguel Blanco, otro autor de esta serie, que consigue que su calidad como persona y amigo supere a la de sus obras. Algo muy difcil. A Antonio Quirs, Jorge Serrano, Pepe Hevia, Angel Rayo, Victor Arrondo y todos mis compaeros de Alhambra-Eidos, por su apoyo constante. A Carlos Hevia, por sus aportaciones bibliogrficas. A mis buenos compaeros del grupo de MVP de Microsoft, y muy especialmente, a la ya mundialmente conocida Escuela Mediterrnea de SQL Server. Ellos saben quienes son.

ndice

1. Introduccin a los conceptos de seguridad .......10 La iniciativa de informtica fiable (Trustworthy Computing) ..................................13 El principio SD3 .......................................................15 La ventaja del atacante y el dilema del defensor ......17 Creacin de una cultura de seguridad en la empresa ......................................................18 reas de influencia ....................................................19 2. Seguridad en el ciclo de vida de un proyecto de software ....................................23 Los principios bsicos de MSF .................................23 Recomendaciones generales para cada27 fase del ciclo de vida .......................................27 Seguridad en la fase de previsin (o anlisis)............30 El modelo de riesgos bajo el prisma de la seguridad ................................................33 El control de la seguridad en las capas lgicas de la aplicacin................................................35 Seguridad en la fase de implementacin ..................42

Seguridad en la fase de pruebas ................................44 3. Estrategias de defensa: SD3 + C .........................47 Creacin del modelo de amenazas............................49 Breve explicacin de las amenazas del modelo STRIDE ............................................54 Implantacin de las estrategias de defensa ...............63 Autenticacin ...........................................................63 Autorizacin .............................................................67 Flujo de identidad (Identity Flow) ...........................69 Estrategias de diseo en el flujo de identidad .........74 Auditora ...................................................................77 4. Programacin de la seguridad en .NET Framework .......................................82 .NET como plataforma de ejecucin segura............82 Arquitectura de un ensamblado ...............................83 Seguridad en el Acceso al Cdigo (CAS) .................85 Evidencias, permisos y polticas de seguridad .........87 Gestin de seguridad mediante cdigo ...................97 Almacenamiento seguro de informacin crtica ....106 Criptografa ............................................................119 Algunos tipos de ataques ........................................149 5. Seguridad vinculada a arquitecturas ................161 Seguridad en aplicaciones Web ASP.NET.............161 La seguridad y el modelo de proveedores ..............167 Uso de SqlMembershipProvider ............................168 Configuracin de las propiedades del proveedor de pertenencia a grupo ...............171

Ejemplos de implantacin de seguridad en ASP.NET 2.0 ...............................172 Gestin de la autenticacin y autorizacin: controles login y las API de pertenencia a grupos ..............................................................172 Seguridad en los servicios Web...............................184 6. Seguridad en las fases finales ...........................193 Fase de pruebas ......................................................193 Seguridad en la implantacin y mantenimiento ....196 Conclusin .............................................................209

captulo

Introduccin a los conceptos de seguridad

La seguridad es un problema de nuestros tiempos. Desde hace algunos aos, todas las actividades cotidianas estn teidas de algn concepto asociado a la seguridad. Desde los simples juguetes, hasta los automviles. El software no iba a ser una excepcin. Las aplicaciones de hoy no son elementos aislados, y no se trata siquiera de que nuestra aplicacin funcione correctamente, sino de que otras aplicaciones no interfieran con la nuestra en forma no deseada. O que los usuarios no puedan realizar operaciones no previstas. Por otro lado, el software de hoy necesita estar interconectado, integrarse, emitir y recibir informacin fuera de los lmites de su proceso de ejecucin y muchas veces, fuera del sistema operativo sobre el que se ejecuta. Los primeros virus informticos aparecidos en los 90 causaban ms curiosidad que miedo y tenan como medio de transmisin la insercin directa en un medio fsico porttil (disquete, casi siempre). La situacin hoy es muy diferente debido a la aparicin de Internet, que, si bien se ha

convertido en imprescindible, al tiempo, ha abierto la caja de Pandora donde todos los truenos se esconden dispuestos a impactar contra nuestros sistemas. Estamos hablando de virus? No, realmente. Hablamos de seguridad, y eso, va ms all de la influencia de Internet. No es necesario en absoluto que exista infeccin vrica para que se violen los principios de la seguridad. Cualquier persona que acceda a informacin cuya naturaleza no le compete o que simplemente no haya sido expresamente autorizada, est violando la seguridad. Cualquier dato que salga de los lmites para los que ha sido concebido, est excediendo su contexto de seguridad. Un empleado que se apropia de cdigo fuente indebidamente, puede atentar contra la seguridad una vez abandonada su empresa (o incluso mientras permanece all). En general, cualquier proceso utilizado para fines para los que no ha sido diseado, o sometido a cargas de trabajo para las que no est preparado (como los ataques DoS, o Denial of Service) puede convertirse en un peligro para la seguridad. En la prctica, cualquier entrada de datos puede ser potencialmente daina, si el usuario conoce (o es capaz de inferir) el funcionamiento interno del programa: de hecho, dos de los tipos de ataque ms conocidos se basan en esto: Buffer overrun y SQL-Injection. Incluso existen factores no intencionados en absoluto que pueden provocar un mal funcionamiento de un sistema (o dispositivo) simplemente, por que el programador no ha previsto que la capacidad humana de error (casi infinita) puede provocar dicha situacin.

nota

Ejemplo. Pongamos un caso en extremo inocente: un programa solicita en una caja de dilogo de impresin cuntas copias queremos de un documento, y, por cualquier razn, le indicamos 9999 32.767 (valores mximos autorizados para la mayora de impresoras) en lugar de 9. O que la impresora permite una configuracin de tipo de letra, a la que asignamos un tipo vectorial de 500 puntos! Estaremos forzando al sistema ms all de los lmites entre los que su funcionamiento es adecuado. No son en s mismosagujeros de seguridad intencionados (por ninguna de las partes, muchas veces), pero pueden provocar efectos totalmente indeseados.

Como vemos, la naturaleza de los ataques a la seguridad es muy variada, y, de hecho, tambin lo es la defensa contra dichos ataques. Buena parte de esa defensa, tiene que ver con la administracin del propio sistema operativo, pero nuestro cdigo puede, en ocasiones, permitir lo que el propio sistema impide y eso supone un planteamiento serio de todo el modelo de amenazas. Esta obra va a centrarse en la seguridad del cdigo fuente y utilizar como modelo la plataforma .NET Framework 2.0, que nos servir de laboratorio de pruebas, en muchas ocasiones. La mayor parte de lo indicado aqu es perfectamente extrapolable a las versiones anteriores y, cuando no sea as, lo indicaremos de forma explcita. Proponemos un recorrido por el ciclo de vida de las aplicaciones (haciendo especial hincapi en la fase de desarrollo), recomendando qu aspectos de seguridad debieran de tenerse en cuenta, cmo mitigar los efectos indeseados y qu medidas preventivas nos parecen imprescindibles para ofrecer el adecuado nivel de calidad en las aplicaciones que queremos para nuestros clientes.

Aviso. Debemos de tener en cuenta que es un error pensar que, una vez que la aplicacin est terminada, si observamos un fallo de seguridad, ser sencillo poner un parche para arreglarlo. A veces, puede significar un recorrido por el ciclo completo.

De hecho, cuanto ms tarde se arreglen las cosas (en cualquier aspecto, en general), peor. De ah que este paseo rpido por la seguridad recorra todo el ciclo de vida y no solo la fase de codificacin, de tal forma que el lector pueda tener una gua bsica pero global de los problemas de seguridad y sus soluciones potenciales. Tampoco es nuestro objetivo revisar los mecanismos de seguridad perimetral propios de los sistemas operativos. En los apartados adecuados, indicaremos qu parte de la arquitectura de software es la responsable de la seguridad, y en algunos casos, cmo modificarla sin recurrir al administrador del sistema. Mucho y bueno hay escrito al respecto, y solamente asumiremos que, en lo fundamental, se conocen los mecanismos bsicos o sabemos la forma de solicitar su implantacin por el encargado de la administracin del sistema.

La iniciativa de informtica fiable (Trustworthy Computing) Para abordar el problema de la seguridad con fundamento, un grupo de grandes empresas, entre las que se encontraba desde sus inicios Microsoft, propusieron una iniciativa de informtica fiable que como puede leerse

nota

en su documento oficial1 establece que se debe perseguir la meta de que los sistemas cumplan con estos cuatro principios: Seguros: ningn virus atentar contra nuestros sistemas o los volver inutilizables. Privados: la informacin personal no ser expuesta de ninguna forma, ni podr ser utilizada en manera alguna que no sea la explcitamente indicada en el momento de su exposicin. Fiables: cuando instalemos un programa, no tendremos que preocuparnos por los posibles efectos colaterales que pueda tener sobre otro software instalado. Integridad de negocio: mi proveedor de servicios responder rpida y efectivamente cuando informo de un problema. Uno de los frutos de esta iniciativa ha sido la colaboracin y el acuerdo, respecto a la distribucin de software, de conseguir una nueva generacin de productos basndose en estos patrones. Dentro de esta propuesta, hay que destacar, en lo que concierne al ciclo de vida de desarrollo de software, el documento oficial The Trustworthy Computing Security Development Lifecycle (a partir de ahora, SDL), que pretende establecer las guas a seguir en un desarrollo seguro y definir patrones repetibles que puedan servir de medida de la seguridad del software producido. Adicionalmente, existe un sitio Web (http://www.microsoft.com/mscorp/twc/default.mspx)
1

Disponible en http://www.microsoft.com/mscorp/twc/twc_whitepaper.mspx

que explica con detalle el conjunto de medidas tomadas por Microsoft para cumplimentar los principios definidos por la iniciativa. El nmero de acciones para llevarlo a cabo es bastante grande (como es de esperar de una compaa de tal volumen), y sobrepasan con mucho el mbito de los objetivos de esta obra, por lo que remitimos al lector interesado a la Web antes citada. Los 3 factores clave de la propuesta SDL son: Procesos repetibles (en camino hacia un enfoque ms cientfico del ciclo de vida, los procesos en que podemos descomponer el desarrollo de una aplicacin, deberan de poderse repetir siempre, incluyendo aquellos que ataen a la seguridad de la misma). Educacin en Ingeniera de Software, haciendo especial nfasis en la seguridad, lo que implica la creacin de un comit de seguridad dentro de la empresa y de unos responsables de seguridad en el equipo de desarrollo. Naturalmente, tales compromisos implican un conocimiento previo de la materia y una voluntad de continuidad en el esfuerzo. Mtrica y auditora: Conjunto de tcnicas tendentes a conseguir una medida del avance del proceso en trminos de cantidad de proceso realizado y tiempo restante respecto al plazo de finalizacin programado.

El principio SD3 La forma en que estos principios se formalizan en metodologas recibe el nombre de SD3: Seguro por Diseo,

Seguro por Defecto y Seguro en el Despliegue. A lo que hay que aadir un cuarto factor fundamental: Seguridad en las comunicaciones, con lo que la frmula final adopta la forma SD3 + C. Las dos primeras, son las que mayores beneficios ofrecen. En general, la introduccin de estas ideas dentro del ciclo de vida, conducen a un grfico de proceso similar al siguiente:

figura 1

Secuencia de acciones de seguridad a lo largo del ciclo de vida

Seguro por Diseo. Al menos 3 puntos a tener en cuenta: Arquitectura y cdigo seguros. Anlisis de riesgos. Reduccin de vulnerabilidades.

Seguro por Defecto. Se puede dividir en otros 3 aspectos: Reduccin del posible rea de ataque. Las caractersticas no usadas del producto deben deshabilitarse por defecto Requerir privilegios mnimos. Seguro en el Despliegue. Implica: Proteger, detectar, defender, recuperar, administrar todos estos verbos asociados con la gestin de la seguridad. En la gestin de procesos: elaborar guas Cmo hacer?, y guas de arquitectura. Formacin. Parece excesivo? Pues no lo es. Basta con recordar lo que Howard/Leblanc llaman: La ventaja del atacante y el dilema del defensor Como el problema se plantea de forma global en su sentido ms amplio, requiere de una estrategia, un anlisis y unas acciones de la misma naturaleza. Naturaleza que, por otra parte, es desventajosa y que los citados autores en su excelente obra2 sobre seguridad denominan La ventaja del atacante y el dilema del defensor, que se articula en 4 principios fundamentales: 1. El que defiende tiene que defender todos los puntos; el atacante puede seleccionar el ms dbil.
2

Writing secure code 2 Edicin. Ed. Microsoft Press. Michael Howard y David LeBlanc.

2. El defensor solo puede defenderse de ataques conocidos; el atacante puede probar nuevas formas de ataque. 3. El defensor debe de estar en constante estado de vigilancia; el atacante puede golpear a voluntad. 4. El defensor debe jugar segn las reglas; el atacante puede jugar sucio. Y para acabar de empeorar las cosas, ni siquiera conocemos la identidad del atacante, que en el peor de los casos podran estar dentro de nuestra propia casa: empleados descontentos, espas tecnolgicos o simple dejadez pueden suponer una va de escape a importante informacin corporativa. Naturalmente, nunca estaremos totalmente a salvo, pero s podremos poner las cosas difciles a los atacantes y sobre todo definir cules son los baremos de seguridad que consideramos suficientes en nuestras aplicaciones. Creacin de una cultura de seguridad en la empresa Los citados autores van un paso ms all y nos sugieren algunas ideas para instaurar en nuestros equipos de desarrollo una cultura sobre la seguridad, tales como: nominar un especialista de seguridad que est al tanto de los ltimos parches y sistemas que ofrezca el mercado, seleccione un equipo de seguridad dentro de la empresa, suministre la informacin o la formacin adecuada sobre el tema a los que la necesitan, establezca incluso recompensas al cdigo ms seguro, o al mejor parche, y finalmente compruebe las amenazas de seguridad y su

severidad para ofrecer consejos sobre la mejor forma de solucionarlas. Sera el gestor de seguridad de la empresa, y, en grandes organizaciones, el encargado de designar y mantener el equipo de seguridad (Security Team), propuesto por las iniciativas de buenas prcticas.
Recomendacin: Lo adecuado es que esa cultura forme parte de todos y cada uno de los integrantes de un proyecto de software, y de acuerdo con ese principio, cada rol del equipo de trabajo debera tambin ser responsable de su parcela de seguridad: la que compete ese rol.

reas de influencia En un documento publicado por Microsoft en 20033, se establecan un conjunto de principios que regiran a toda la empresa y que seran aplicables a cualquier otra que quisiera abordar con un mnimo de seriedad los problemas de seguridad. En forma esquemtica, se dividan en 4 reas de influencia: la administrativa, la de usuarios y datos, la puramente vinculada al mundo del desarrollo de software, y la correspondiente a operaciones y mantenimiento. Describimos someramente las competencias de cada una. Administrativa: debera asumir un compromiso con la gestin del riesgo y la concienciacin de la seguridad. Sus acciones relacionadas seran la gestin del
3

El documento todava estaba disponible en el momento de la escritura de este captulo en la direccin: http://download.microsoft.com/download/c/3/e/c3e59c9e-9fe94cca-b555-dd059e34ae28/La_seguridad_en_Microsoft.doc

nota

riesgo en funcin de los objetivos empresariales, la gestin y administracin de roles vinculados a la seguridad y el compromiso de trabajo en modo seguro. Usuarios y datos: se relaciona con 2 activos fundamentales a nivel corporativo. Para el primero de ellos, se trata de vigilar y garantizar que las personas acceden a la informacin necesaria para la correcta realizacin de sus funciones, preservando el resto de la informacin y tratando de establecer el difcil equilibrio entre seguridad y eficacia laboral. Hay muchos factores que intervienen aqu, pero, comprobar la garanta de identidad y basar las decisiones en la clasificacin y el uso razonable de los datos, son dos de las ms importantes a este nivel. Desarrollo de software: respecto al desarrollo, el objetivo debera ser conseguir la produccin de software seguro y de calidad, y para ello, hay que establecer las estrategias de una defensa en profundidad, reduciendo al mnimo la superficie de ataque (recuerde el lector ni siquiera Aquiles se libr de los ataques, aunque su superficie de exposicin era mnima) Operaciones y mantenimiento: por ltimo, integrar sistemas y personas, y lograr establecer los mecanismos a travs de los cuales stas puedan garantizar el funcionamiento de esos sistemas con un mnimo de garantas de seguridad. Aunque son muchas las posibilidades en este campo, algunas de las acciones tpicas podran basarse en la

planificacin del mantenimiento, el respeto a las polticas de seguridad, la supervisin y auditoria de los mismos, y, por supuesto, la respuesta adecuada a los incidentes. En la siguiente tabla 1, aparecen estos principios expuestos de forma esquemtica, y detallados para cada una de las 4 reas de influencia.
Categora Principio de seguridad

Administrativa: Dirigido al compromiso de la administracin con la gestin del riesgo y la concienciacin sobre seguridad.

Gestionar el riesgo de acuerdo con los objetivos empresariales. Definir roles y responsabilidades administrativos. Invertir en el diseo de la seguridad. Comprometerse a trabajar de modo seguro. Practicar el menor nmero de privilegios. Basar las decisiones en la clasificacin y el uso razonable de los datos. Hacer cumplir la proteccin de la Privacidad y de la Informacin Personal Identificable. Asegurar la integridad de los datos. Controlar la garanta de identidad. Integrar la disponibilidad. Integrar la seguridad en el ciclo de vida. Disear una defensa en profundidad. Reducir la superficie de ataque. Mantener la simplicidad.

Usuarios y datos: Incluye la autentificacin, la privacidad del usuario y la autorizacin de datos.

Desarrollo de plicaciones y sistemas: Dedicado a disear y desarrollar sistemas seguros. Operaciones y mantenimiento: Integra las personas, los procesos y la tecnologa para construir, mantener y poner en marcha sistemas seguros.

Planificar el mantenimiento del sistema. Hacer respetar la configuracin de seguridad y su endurecimiento. Supervisar y auditar. Responder ante los incidentes. Verificar la recuperacin tras un desastre.

Tabla 1. Principios de seguridad

En el citado documento, se concluye con este apartado denominado las cinco garantas de confianza: 1. Mi identidad no se ve comprometida. 2. Los recursos que necesito son seguros y estn disponibles, entendiendo seguro y disponible de este modo: Seguro. Libre de la manipulacin y del acceso no autorizado. Disponible. Libre de vulnerabilidades de seguridad y disponible a travs de acuerdos de servicio. 3. Mis datos y comunicaciones son privados. 4. Entiendo mi papel y soy responsable de mis deberes para garantizar un entorno seguro. 5. Recibo respuestas adecuadas a los riesgos que me afectan. Y todo esto, sin que abandonemos nunca nuestra mejor arma: el sentido comn. Si una buena prctica, una recomendacin del gur, o cualquier otra consideracin al respecto no encajan con el conjunto coherente de las medidas diseadas, es que probablemente no es aplicable en nuestro caso. No se preocupe, no pasa nada.

Vous aimerez peut-être aussi