2. A genda
VSTS
Introducción
Seguridad
Conceptos generales de seguridad en aplicaciones de
software
Autenticación y Autorización
Escribir Código Seguro – Las mejores prácticas
Modelo de Amenazas
Consideraciones Generales
Validar user input
Criptografía
3. A genda
VSTS
Introducción
Seguridad
Conceptos generales de seguridad en aplicaciones de
software
Autenticación y Autorización
Escribir Código Seguro – Las mejores prácticas
Modelo de Amenazas
Consideraciones Generales
Validar user input
Criptografía
4. Visual Studio Team System
Visual Studio Team Edition Visual Studio Team Edition Visual Studio Team Edition
Software Architects Software Developers Software Testers
Application Designer Dynamic Code Analyzer Load Testing
Logical Infra. Designer Static Code Analyzer Manual Testing
Deployment Designer Code Profiler Test Case Management
Unit Testing
Code Coverage
Class Designer
Visio and UML Modeling
Team Foundation Client (includes CAL)
Visual Studio Professional Edition
o du Sl aus V
i
a ss ec o P
Visual Studio
Change Management Reporting Integration Services
r
Team Foundation Server
Team Build Work Item Tracking Project Site Project Management
i t
8. A genda
VSTS
Introducción
Seguridad
Conceptos generales de seguridad en aplicaciones de
software
Autenticación y Autorización
Escribir Código Seguro – Las mejores prácticas
Modelo de Amenazas
Consideraciones Generales
Validar user input
Criptografía
9. Computación Confiable
La computación confiable tiene cuatro pilares:
Confiabilidad significa que un sistema de computación es confiable,
esta disponible cuando se lo necesita, y la performace es la esperada y
llega a niveles esperados.
Seguridad significa un sistema resistente a ataques, la
confidencialidad, integridad, y disponibilidad tanto de los sistemas como
de los datos está protegida.
Privacidad significa que la gente puede controlar su información
personal y a las organizaciones que usan esta información fielmente
protegida.
Integridad de Negocio alrededor de las compañías en su industria
que es responsable de ayudar a los clientes a buscar soluciones
Seguridad en .NET
apropiadas para sus negocios, localizar problemas con productos o
servicios, y abrir una interacción con los clientes.
Bill Gates
Julio 18, 2002
10. Tipos Comunes de Ataques
Atacantes
Ataques
Organizados
Ataques
Datos restringidos Automáticos
DoS
Seguridad en .NET
Brechas Accidentales
Falla de Conexión
Virus, Caballos de Negación de
Troya, Servicio (DoS)
y Gusanos
11. Consecuencias de una Seguridad Pobre
Robo de propiedad intelectual
Sistemas sin productividad (downtime)
Menor productividad
Daño a reputación de negocio
Perdida de confianza de los consumidores
Varias perdidas financieras debido a perdidas
Seguridad en .NET
en el ingreso
13. Autentificación – Propósito de la Autentificación
Verifica la identidad de un principal
mediante:
Aceptar credenciales
Validar estas credenciales
Comunicaciones Seguras dando por hecho
que la aplicación conoce quién es el
llamador
Seguridad en .NET
14. Autentificación – Métodos de Autentificación
Basic
Digest
Firmas digitales y certificados digitales
Integridad
Protocolo Kerberos versión 5
NTLM
Microsoft Passport
Seguridad en .NET
Biométrica
15. Demo
•Métodos de autenticación con IIS
Seguridad en .NET
16. Autorización - Qué es autorización?
Autorización:
Ocurre después que la petición del cliente
es autentificada
Es el proceso de confirmar que una
autentificación principal está permitida a
acceder a recursos específicos
Chequea la correcta asignación de
archivos, carpetas, registro de
Seguridad en .NET
configuraciones, aplicaciones, y demás
Puede ser basada en roles
Puede ser basada en código
17. Autorización – Técnicas comunes de
autorización
Acceso Web IIS y restricciones IP/DNS
Seguridad basada en roles .NET
Código de seguridad de acceso .NET
Listas de control de acceso NTFS (ACL)
Logins SQL Server
Permisos SQL Server
Seguridad en .NET
18. Demo
•Acceso Web IIS y restricciones IP/DNS
•Logins SQL Server
Seguridad en .NET
•Permisos SQL Server
19. Adoptar el Framework de Seguridad
SD3
Construir un modelo de defensa
Seguro por Conducir revisión de código, test de
Diseño penetración
Correr código con los mínimos privilegios
Seguro por Minimizar las superficies de ataque
Defecto Deshabilitar servicios innecesarios
Seguridad en .NET
Impulsar mejores prácticas de seguridad
Seguro en
Crear guías de seguridad
el
Construir herramientas para evaluar la
Deployment seguridad de aplicaciones
20. Seguro por Diseño
Elevar la conciencia de seguridad en el equipo
de diseño
Usar entrenamiento continuo
Actitud de desafió - “Lo que no conozco no me
daña” no es aplicable!
Adquirir seguridad correcta durante la fase de
diseño
Definir objetivos de seguridad del producto
Seguridad en .NET
Implementar seguridad como una característica
clave del producto
Usar modelos de defensa durante la fase de
diseño
21. Qué es el modelo de amenazas?
El modelo de defensa es un análisis
basado en la seguridad que:
Ayuda a un equipo a entender donde los
productos son más vulnerables
Evalúa las amenazas de una aplicación
Apuntar a reducir el riesgo global de
seguridad
Detectar valor
Seguridad en .NET
Descubrir vulnerabilidades
Identificar amenazas
Debe ayudar al diseño de seguridad básica
22. Beneficios del Modelo de Amenazas
Ayuda a entender mejor a su aplicación
Ayuda a encontrar bugs
Identifica complejos
bugs en el diseño
Vulnerabilidad
Ayuda a integrar
nuevos miembros
de equipo
Seguridad en .NET
Conduce a un buen Amenaza Activo
diseño de plan de seguridad
23. El proceso del modelo de Amenazas
Amenazas Proceso de Modelado
1 Identificación de Activos
2 Crear una visión general de Arquitectura
3 Descomponer la Aplicación
4 Identificar las Amenazas
Seguridad en .NET
5 Documentar las Amenazas
6 Evaluar las Amenazas
24. Mejorar el Proceso del desarrollo de
Aplicación
Consideraciones de seguridad
Al inicio del proceso
A través del desarrollo
A través de la distribución
A través de todas las revisiones del
software
Seguridad en .NET
No parar de revisar bugs en la seguridad
hasta que termine el proceso de
desarrollo
25. Prueba de Seguridad
Involucre a un equipo de pruebas al inicio del
proyecto
Use un modelo de amenazas para desarrollar una
estrategia de pruebas seguras
Piense Mal. Sea Malo. Prueba lo Malo.
Ataques automáticos con scripts y lenguajes de
programación de bajo nivel
Introduzca una variedad de datos inválidos
Borre o deniegue acceso a archivos o entrada al registro
Seguridad en .NET
Pruebe con una cuenta que no es una cuenta de
administrador
Conozca a su enemigo y conozca se a usted mismo
Qué técnicas y tecnologías van a usar los hackers?
Qué técnicas y tecnologías van a usar los testers?
26. No confíe en las entradas de Usuario
Validar todas las entradas
Asuma que todas las entradas son dañinas hasta
probar lo contrario
Verificar la validación de datos y rechazar todo en
caso contrario
Restricciones, rechazar entradas de usuario
con
Chequeo de tipos
Chequeo de tamaño
Chequeo de rango check
Seguridad en .NET
Chequeo de formato
Validator.ValidationExpression =
"w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*";
29. Qué es criptografía simétrica?
Permite transferencia de datos segura
Confianza segura sobre claves seguras compartidas
Intercambio de claves seguras es un desafío
Clave secreta Clave secreta
Datos Datos Encriptados Datos
Algoritmo Algoritmo
Seguridad en .NET
Simétrico Simétrico
Remitente encripta los Receptor desencripta
1 datos confidenciales
usando claves secretas
2 datos confidenciales
usando claves secretas
30. Qué es Criptografía Asimétrica?
Permite segura transferencia de datos seguros
Usan pares de claves relacionadas matemáticamente:
una clave pública y una clave privada
Remitente encripta los Datos
Algoritmo Datos
1 datos usando la clave
publica del receptor Clave pública Asimétrico Encriptados
del Receptor
Seguridad en .NET
Datos
Receptor desencripta Encriptados Algoritmo
2 los datos usando su
clave privada Clave privada Asimétrico
Datos
de Receptor
31. Qué es la Firma Digital?
Puede usar criptografía asimétrica para asegurar la
integridad de los datos
El remitente parte los datos y encripta los pedazos con su clave
privada para generar la firma
Algoritmo Valores Hash Algoritmo
Datos Firma
Hash Clave primaria de Asimétrico
remitente
El receptor desencripta la firma con la clave pública del remitente
Seguridad en .NET
y compara los valores con los pedazos de data
Firmas
Algoritmo Valor Desencript Algoritmo
Datos
Hash Los valores son iguales?
Hash ar Firma Asimétrico Clave
pública de
remitente
Notas del editor
Producir software de alta calidad en tiempo es una tarea muy difícil de llevar a cabo. No son solo los desarrolladores los que llevan adelante el desarrollo de software. Los equipos de proyectos generalmente consisten en Project Managers, Analistas de negocios, Arquitectos de aplicación, Desarrolladores y Testers. Desafortunadamente, en muchos casos el desafío mayor es la coordinación entre estas personas, ya que no hay una herramienta que ayude con la coordinación. Existe una herramienta que permite compartir información y colaborar de manera mas sencilla en el ciclo de vida del desarrollo de software. Visual Studio Team System. VSTS provee soporte a Arquitectos, Desarrolladores, Testers y Porject Managers. Visual Studio Team System is Microsoft's newest addition to the Visual Studio family. This is a very significant release since, for the first time, Microsoft is targeting the entire software development lifecycle. Building on the features of Microsoft Visual Studio 2005, Team System provides additional features to support Architects, Developers, Testers, and Project Managers. Team System provee un conjunto de nuevas herramientas que apuntan al proceso de desarrollo de software, proveen una plataforma para customizar procesos e integrarlos con los procesos y herramientas existentes. Team System for Software Architects Team Architect incluye Distributed System Designers, que hacen del modelado una nueva funcionalidad integral de Visual Studio. Estos diseñadores no solo crean diagramas, sino que además permiten evaluar el diseño de aplicación y de sistema antes de escribir código. Team System for Software Developers Visual Studio es la herramienta ideal para escribir código, Team Developer hace simple la tarea de los desarrolladores, con todas las herramientas ya vistas, mas herramientas para: -Análisis de código, verificando patrones de defectos específicos. -Análisis dinámico para medir performance en tiempo de ejecución. -Testing Unitario, provisto por framework que acompa VSTS -Code Coverage, permite controlar lineas de código testeadas y ejecutadas. Team System for Software Testers VSTS integra herramientas para soporte de testing tanto para desarrolladores como para testers. Provee una consola para adminsitrar, ejecutar y trackear los test. Team Foundation Server Team Foundation Server ayuda al equipo entero con un nuevo systema de administración de código fuente, tracking de Work Items, builds automáticos, análisis de integración y reportes y sitios de colaboración. Además provee adminsitración de proyectos a partir de la integración con Microsoft Project y Microsoft Excel 2003. -Source Control Management: Control de código fuente escalable, funciona sobre HTTP y HTTPS y se integra con SQL Server 2005. -Work Item Tracking: Un Work Item es “algo” que puede ser asignado y completado por alguien en un equipo. Puede tener estados, como abierto o cerrado, sin embargo, la mayoría de los proyectos tienen diferentes “working items”, cada uno con sus características, estados y transiciones. Son ejemplos bugs, issues, risks, etc. Esto permite utilizar esta herramienta como un bug tracker mucho mas poderoso y sofisticado. -Build Automation: Buena practica muy importante en el desarrollo de software. Se pueden determinar, ejecutar y loguear distintos tipos de builds, y luego ser reportados y analizados.
Team System para Software Architects Logical Datacenter Designer Es utilizado para crear un diagrama lógico de un datacenter, que permite tener una definición de las configuraciones específicas del servidor de aplicaciones, IIS, SQL Server o BizTalk y mostrar como estas representaciones lógicas de configuración de los servidores están interconectardas. Los servidores lógicos pueden agruparse por zonas que definen la frontera lógica de comunicación. Las Zonas tienen indicadas entonces los tipos de servidores lógicos y la dirección y tipo de comunicación que puede entrar y salir del datacenter.
Application Designer Cuando se esta diseñando la arquitectura de una nueva solución, es importante tener un esquema completo de dicha solución. Se producirán continuas refinaciones del modelo hasta que se comience con un diseño mas profundo, descomposición funcional y finalmente construcción. El diseñador de aplicaciones juega un rol importantísimo en este proceso. Es posible diseñar y configurar aplicaciones utilizando esta herramienta. Es posible descomponer una solución en aplicaciones (unidades de código que pueden ser desplegadas independientemente, como Web Services, Smart Clients o sitios Web).
System Designer Se utiliza para crear el diseño de sistemas aplicativos, (unidades de deploy), que están compuestos por aplicaciones definidas en el diagrama de aplicación o desde otros diagramas de sistemas. Cada aplicación puede ser conectada y configurada de manera diferente desde su definición, en función de la manera en la que se realizará el deploy.
El ecosistema informático de hoy día abarca a personas, procesos, dispositivos, aplicaciones, redes y sistemas. Puesto que la disponibilidad y el rendimiento son el resultado de la interacción entre numerosos elementos diversos de ese ecosistema, el proporcionar una experiencia informática confiable es increíblemente complejo y constituye un gran desafío. En ese contexto, no es sorprendente que un sistema pueda fallar ocasionalmente. La computación confiable debe ser una seria iniciativa dentro de su empresa para mejorar la seguridad y confiabilidad de las computadoras. Debido a que las computadoras son un importante componente de los negocios, las mismas deben: Ser confiables. Puedan soportar ataques a la seguridad. Proporcionar una sensación de confianza a ambos, negocios e individuos, de que sus datos son seguros. Es importante comprender que no todos los ataques provienen del exterior de su empresa. Una estimación general de los expertos, entiende que entre el 70% y el 80% de los ataques, problemas de seguridad y acciones maliciosas, se originan dentro de la empresa, por los mismos empleados, con o sin intención.
Los ataques organizacionales envuelven una ruptura a su red para intentar acceder a información confidencial y obtener una ventaja del negocio. Los atacantes pueden hacerlo sólo para probar sus conocimientos para sobrepasar los sistemas de seguridad de su empresa y entrar en su red. Ataques automáticos usan software para realizar un scan de las vulnerabilidades de la red, o para implementar un ataque de “fuerza bruta”. Los ataques de “fuerza bruta” significa intentar con una gran cantidad de usuario/password u otras credenciales hasta obtener permisos en la red. Los ataques del tipo “Negación de Servicios” (Denial of Service – DoS) abruman un servidor con pedidos de acción, de tal modo haciéndolo incapaz de proporcionar su servicio normal. Virus, Caballos de Troya, y gusanos (worms) son programas que explotan algunas vulnerabilidades para auto-instalarse en las computadoras. Una vez presentes en ella, se distribuyen a otras computadoras de la red interna o mediante Internet, y de esta forma se van propagando. Aberturas accidentales en la seguridad, comúnmente resultan de prácticas o procedimientos pobres. Por ejemplo, la exposición de información de seguridad, tales como nombres de usuario y contraseñas, pueden ser explotadas por un atacante para obtener acceso a la red. Ejemplos de intrusiones de seguridad: CodeRed es un gusano que: Usa una IP aleatoria para expandirse infectando IIS vulnerables, explotando un buffer overrun en la versión 2.0 de Microsoft Index Server 2.0, un componente de Internet Information Services (IIS) ILOVEYOU es un virus que: Se contiene en un adjunto de e-mail llamado LOVE LETTER FOR YOU.TXT.VBS (un script Visual Basic) Una vez abierto el adjunto, elimina imágenes y MP3, daña la registry y se expande enviando e-mails a toda la lista de contactos del address book. LOVE LETTER FOR YOU.TXT.VBS Nimda es un virus que: Se expande a sí mismo como adjunto de un e-mail llamado README.EXE. Localiza los archivos .exe del equipo y se inserta dentro de ellos como un recurso, y de esta forma se propaga con el intercambio de archivos entre los usuarios. Adicionalmente realiza un scan de Internet buscando sitios vulnerables para propagarse, infecta mediante la apertura de documentos Word, y se manda a las direcciones de e-mail que haya obtenido de su cliente de e-mail.
Una seguridad pobre puede resultar en un gran daño para sus negocios. Sus competidores pueden obtener conocimientos de sus tecnologías y sistemas, obteniendo ventajas competitivas. Sus competidores podrán copiar sus ideas o tecnologías e implementarlas en sus propios productos. Un ataque puede dar lugar a que sus sistemas queden fuera de línea mientras que se determina y se rectifica el daño. Todo el esfuerzo realizado en combatir y reparar los sistemas dañados es una baja en la productividad. Este tiempo y esfuerzo se podrían haber usado para perseguir las metas de su empresa. Su reputación de negocio se verá dañada. Cuando una intrusión de seguridad es reportada, se asume que sus sistemas de seguridad son malos, entonces varias de sus prácticas deben ser malas. Es fácil llegar a la conclusión que sus sistemas y productos son igualmente pobres. Clientes que no pueden utilizar su website porque está bajo ataque, podrían visitar a los websites de sus competidores. Las pérdidas financieras por intrusiones de seguridad pueden ser sustanciales.
Técnicas recomendadas en seguridad: IPSec – Definición : IPSec se basa en 2 pilares: La protección del contenido de los paquetes IP Proveer defensa contra ataques de red a través del filtrado de paquetes y de un refuerzo en la confianza de la comunicación. Ambos pilares se combinan entre si para usar servicios de criptografía, protocolos de seguridad y administración de llaves dinámicas. Este funcionamiento provee una dura y a su vez flexible comunicación con protección entre las computadoras de la red interna, dominio, sitios, accesos remotos, etc. IPSec puede ser utilizada para bloquear recipientes o transmitir tipos específicos de paquetes. IPSec esta basado en un modelo de túnel de punto a punto, estableciendo un túnel especifico y seguro desde la dirección IP de origen hasta dirección IP de destino. Este modelo permite ser implementado satisfactoriamente en cualquiera de los siguientes escenarios: Local Area Network (LAN): cliente / servidor y punto a punto. Wide Area Network (WAN): Router a Router y Gateway a Gateway. Remote access: clientes que discan mediante el numero telefónico y clientes que acceden a redes privadas desde Internet Implementación de IPSec, mediante políticas de servidor. SSL/TLS Con Secure Socket Layer / Transport Layer Security (SSL/TLS), se tiene la habilidad de poder controlar que trafico cifrado es permitido. Por defecto todo el tráfico es permitido, sin embargo es posible establecer que tipo de cifrados van a permitir las computadoras. Normalmente SSL/TLS se utiliza en aquellos casos en los que se realizan tareas de validación como por ejemplo en operaciones de Home Banking. Una manera fácil de darse cuenta que uno cuenta con una transacción del tipo SSL seria observando en la barra de estado de nuestro browser la existencia de un candado, el cual estaría indicando la existencia de una comunicación segura que en la mayoría de los casos es por medio de un certificado. Por otro lado también se podría observar en el mismo browser que la URL tendría el formato de HTTPS en lugar de HTTP. Habilitación de SSL, para poder utilizar canales seguros es mediante el uso de servidores de certificados y HTTPS Encriptación RPC Esta configuración de seguridad permite a un servidor negociar la comunicación con confidencialidad (encriptación) integridad del mensaje, encriptación de 128 bits y seguridad NTLM v2. Estos valores dependen de la configuración establecida en Lan Maneger Authentication Level. Los cuatro valores posibles serian: Requiere integridad de mensaje : la comunicación fallara si la integridad del mensaje no es negociada. La integridad del mensaje puede ser determinada a través de la firma del mensaje. Estas firmas aseguran que el mensaje no haya sido modificado durante la transmisión del mismo. Requiere confiabilidad en el mensaje : la conexión fallara si la encriptación no es negociada. La encriptación convierte al dato a un formato no legible hasta que sea desencriptado por el destinatario. Requiere sesión con NTLMv2 : Esta conexión fallara si el protocolo NTLMv2 no es negociada. Requiere encriptación de 128 bits : Esta comunicación fallara si una encriptación de 128 bits no es negociada.
Autenticación es el proceso de obtener las credenciales que identifican al usuario, tales cómo nombre de usuario y contraseña, y validar esas credenciales contra alguna autoridad como por ejemplo una base de datos. Si las credenciales son válidas, el usuario que los proveyó es considerado un usuario autenticado. Si usted provee canales de comunicación seguros, pero no verifica quienes lo usan, usted está efectivamente creando un canal oculto para que lo ataquen, el canal cifrado encubrirá con eficacia al atacante.
Para poder configurar la autenticación se debe ingresar al IIS, luego nos desplazamos hasta el sitio web que deseamos configurar y luego vamos a las propiedades del mismo. Dentro de la caja de diálogos que se abre nos posicionamos sobre la solapa Seguridad de Directorios y allí se podrá elegir la distintas opciones. Utilice cualquiera de las siguientes opciones para verificar la identidad de los usuarios: Autenticación Basic : es poco recomendada pero como contra partida es muy sencilla de implementar y es soportada por la mayoría de los sistemas. Una de las grandes desventajas que posee es que envía la password utilizada durante la validación en texto plano, lo cual lo hace poco seguro. Autenticación Digest : es una autenticación mas robusta, y trabaja por medio del envió de un hash en conjunción con Active Directory en lugar de mandar la credenciales en texto plano. Autenticación con firmas digitales y certificados : Los certificados son una manera en la cual se identifican los servidores y los clientes cuando realizan una petición. Los certificados contienen información que es usada para establecer la identidad sobre una red – el proceso es conocido como Autenticación. Similar a un formulario convencional, el certificado habilita a los servidores Web y a los clientes a autenticar antes de establecer una comunicación. Los certificados también contienen valores encriptados o llaves que son utilizados para establecer una comunicación SSL entre el cliente y el servidor. Un servidor de certificados puede ser implementado mediante servidores de Windows 2000 y Windows 2003. Autenticación Integrada : este método envía el nombre de usuario y el password dentro del hash de autenticación. Si este método es habilitado IIS utiliza la Autenticación integrada solo cuando el acceso anónimo fue deshabilitado, por lo cual será requerido el ingreso de un nombre de usuario y contraseña para poder acceder a un recurso determinado. Autenticación Microsoft Passport : este es un método impulsado por Microsoft para poder integrar la autenticación utilizada por todas las cuentas Passport o de Hotmail. Podríamos utilizar este método para poder centralizar el método de autenticación en un solo repositorio en lugar de estar manteniendo diferentes bases de datos de usuarios para cada uno de los distintos sitios en el que uno debe validarse. Y por ultimo métodos de autenticación por biométrica : en este caso dependemos de dispositivos de Hardware como lectores de huellas digitales, reconocimiento de voz y lector de retina entre otros.
Notas para el instructor: Tiempo estimado 15 minutos. Abrir desde las Administrative Tools en el menú Inicio la opción Internet Information Services Extender la entrada Web Sites y luego hacer un clic con el botón derecho del mouse sobre el sitio web que se quiere configurar, luego hacer clic en la opción Properties . En la caja de diálogo que se abre, seleccionar Directory Security , clic en el botón Edit y desde allí se despliegan todos los métodos de autenticación. Discuta con los alumnos cada uno de los métodos de autenticación presentes.
La autorización es un proceso que ocurre luego del proceso de autenticación. Este proceso es el que se encarga de verificar el nivel de acceso del usuario autenticado, sobre un recurso en particular. Durante el proceso de validación se genera un Ticket el cual informa a dónde el usuario tiene acceso. La autorización y la autenticación siempre están juntos, debido a que la mayoría de las políticas de autorización, requieren a un usuario autenticado. La autorización puede basarse en usuarios, que incluye grupos y roles, o puede basarse en código y verificar qué recursos pueden ser accedidos por el código.
Técnicas de Autorización Acceso Web IIS y restricciones IP/DNS : una de las maneras de obtener acceso a los recursos es por medio del nivel se seguridad implementado en el IIS. Dentro de las propiedades del IIS se puede configurar el nivel de seguridad que se le quiere otorgar a un usuario dentro de un sitio Web. Una de las maneras de realizar esto, seria dentro de las propiedades del sitio Web y allí en las opciones de Directory Security . En dicha solapa aparece un botón llamado Edit dentro del apartado IP Address and domain name restrictions . Aquí se debe especificar las direcciones IP o nombres DNS y si se va a garantizar o denegar el acceso del mismo. Seguridad basada en roles .NET : La seguridad basada en los roles de .NET puede ser otorgada según una identidad principal, la cual puede ser construida desde la identidad actual. La identidad puede estar basadas en cuentas usuarios de Windows o puede ser una identidad personaliza no relacionada con la cuenta de usuario de Windows. Las aplicaciones .NET pueden tomar decisiones de autorización basados la identidad actual o en la membresía del rol al cual se pertenece o ambos. Un rol es un conjunto de nombre de principales que tienen los mismos privilegios con respecto a la seguridad. Una identidad principal puede ser miembro de uno o mas roles. Por otro lado, las aplicaciones pueden usar la membresía de los roles para determinar si la acción peticionada puede ser realizada. Las identidades principales están divididas en tres tipos: Generic principals : representa usuarios y roles que existen independientemente de las cuentas de usuarios y roles existentes en Windows 2000/NT. Windows principals : representa cuentas de usuarios de Windows 2000/NT y sus roles correspondientes. Custom principals : pueden ser definidas por la aplicación en el momento que la misma lo necesite. Código de seguridad de acceso : el código de acceso es el mecanismo que le ayuda a limitar el nivel de acceso que se tiene a los recursos y operaciones protegidas. En .NET el código de acceso realiza las siguientes operaciones: Define el conjunto de permisos que representan los derechos de accesos sobre los recursos de sistemas. Habilita a los administradores a configurar las políticas de seguridad asociados al conjunto de permisos con grupos de código. Habilita al código para peticionar permisos si son requeridos para correr la aplicación. Garantiza permisos para que cada assembly sea cargado Para determinar si el código esta autorizado para acceder al recurso o para realizar la operación, el sistema de seguridad llama a un puntero el cual compara los permisos que posee el principal con el declarado por el sistema. Si el sistema comprueba que los permisos no combinan, se rechaza la petición. Listas de control de acceso : otra manera de restringir el acceso a los datos es por medio de permisos NTFS los cuales determinan el nivel de accesibilidad. Para poder implementar seguridad NTFS lo único que se debe realizar seria acceder a las propiedades de la carpeta que contiene el sitio Web y asignar el nivel de seguridad requerido. Logins / Permisos SQL Server : En la sección Logins podemos encontrarnos con 2 tipos de implementaciones, las validaciones a través de cuentas de usuarios de Windows o a través de las cuentas creadas con el mismo SQL. Por otro lado dichas cuentas estarán asociadas a los roles dentro del SQL el cual determinará el nivel de acceso a los diferentes recursos. La manera en la cual se determina el acceso a los recursos es por medio de los permisos que se aplican dentro del SQL a los usuarios o a los roles previamente definidos.
Notas para el instructor: Tiempo estimado 20 minutos. Muestre a los alumnos, cómo deben configurarse las restricciones IP/DNS desde el IIS. A continuación muestre cómo crear logins en Microsoft SQL Server y luego cómo aplicar permisos a esos logins para los objetos (tablas, stored procedures, etc.) y acciones (consulta, modificación, ejecución, etc.)
El primer y más importante paso para obtener una buena seguridad es verificar que la misma sea parte integral del proceso de desarrollo. El equipo Secure Windows Initiative en Microsoft, ha adoptado un conjunto simple de estrategias llamadas SD3. El SD3 es un framework que posee tres conceptos clave: Seguridad por diseño, Seguridad por defecto o de manera predeterminada, y Seguridad en la implementación. Estos tres conceptos deben guiar el proceso de desarrollo para ayudar a entregar sistemas seguros. Seguro por diseño. Implementación de modelos de amenaza y otras consideraciones clave sobre seguridad en las fases de diseño y desarrollo. Estas consideraciones son: formación obligatoria en escritura de código seguro, revisiones de código y pruebas de penetración, herramientas de diagnóstico de código automatizado y arquitectura rediseñada para maximizar la resistencia del software. Seguro de manera predeterminada. Maximización de la seguridad en las configuraciones predeterminadas del software que se distribuye. Si una característica no es activada, el atacante no puede usarla para obtener beneficios. Asegúrese que la aplicación corre con los menores privilegios posibles para que en caso de que un atacante tenga acceso a ella, no la utilice con permisos de administración. Seguro en la implementación. Significa que el producto puede ser mantenido luego de la instalación. Si el producto es difícil de administrar es más difícil mantener una seguridad alta ante amenazas de seguridad. Asegúrese que los usuarios son educados para usar el software de forma segura. Si se descubre una falla de seguridad y se requiere un patch, asegúrese de que el mismo sea fuertemente testeado internamente por el tiempo necesario.
La educación es un ingrediente efectivo en un proceso de desarrollo seguro. Usted debe asegurarse que todos los diseñadores y desarrolladores estén informados respecto a los problemas de seguridad más comunes para no repetir los mismos errores. Los problemas descubiertos tardíamente en el ciclo de desarrollo, son mucho más costosos de resolver. Esto es particularmente cierto para los problemas de seguridad. Asegúrese de que las consideraciones de seguridad se realicen al comienzo del proceso de desarrollo. Los requerimientos de seguridad deben ser considerados con igual o mayor importancia que otros requerimientos funcionales. La seguridad debe considerarse como un una característica del producto, no como un valor agregado. El modelo de amenazas durante la fase de diseño y de desarrollo ha probado ser extremadamente efectivo en determinar los riesgos de seguridad más importantes que posee un producto y cómo puede ser atacado.
Es modelo de amenazas es un análisis que ayuda a los diseñadores a definir los aspectos de seguridad de la especificación de diseño. El concepto del modelo es que usted no puede realizar aplicaciones seguras si no conoce sus amenazas. El modelo analiza las amenazas de seguridad con el objeto de reducir las consecuencias de los ataques. El modelo es simple, sin embargo requiere de tiempo significativo de investigación, y cierta práctica para realizarse correctamente. Sin embargo el tiempo invertido en esta etapa, es tiempo bien invertido. Los bugs descubiertos en esta etapa son mucho más baratos que los descubiertos justo antes de realizar el deploying. Sin en modelo de amenazas, usted no conocerá qué amenazas debe atenuar cada característica de su aplicación. El modelo de amenazas le permitirá identificar sistemáticamente y asignar prioridad a las amenazas que más comúnmente afectan a su sistema.
El modelo de amenazas lo ayuda a: Entender mejor a su aplicación: Los miembros del equipo que invierten tiempo analizando la aplicación de forma estructurada, inevitablemente terminan teniendo un conocimiento profundo de su funcionamiento. Encontrar Bugs: La verificación del modelo de amenazas permite descubrir otros bugs no relacionados con la seguridad. Identificar complejos bugs de diseño: La naturaleza analítica del proceso, puede revelar complejos bugs de seguridad cuando varias pequeñas fallas provocan una amenaza de seguridad mayor. Este tipo de vulnerabilidad no es detectado con técnicas de unit testing realizadas por el desarrollador. Integrar nuevos miembros: El modelo de amenazas es una herramienta muy usada para los nuevos miembros del equipo de desarrollo porque permite familiarizarse con la arquitectura del producto.
Identificación de los activos : para poder contemplar los riesgos que uno posee con la información, primero debería saber dónde se encuentra esta y cómo puede ser accedida. Para poder obtener dicha información es necesaria la construcción de una lista de todos los activos que requieren algún tipo de seguridad. Dentro de estos activos podemos contar a la información propiamente dicha como las bases de datos donde los usuarios guardan sus datos, la confidencialidad de los mismos, etc. A su vez, también habría que tener en cuenta la manera en la cual se acceden a estos datos. Si mi aplicación fuese una aplicación de Internet, uno de los lugares que deberíamos proteger seria nuestro browser, puesto que por fallas de seguridad del explorador utilizado podríamos estar exponiendo indirectamente a nuestra aplicación. Tampoco podríamos dejar de lado a nuestro sistema operativo, el cual corre con la misma suerte que los exploradores utilizados para llegar hasta nuestra aplicación y que en este caso podría inclusive ser una aplicación Windows. La protección de nuestro sistema operativo por medio de services pack y hotfix seria una buena recomendación. Visión de la arquitectura : una vez mas nuestra aplicación debe ser protegida, pero en esta caso nuestra visión se centra en el modelo de arquitectura en el cual se basa. Crear una visión generalizada de la arquitectura de desarrollo nos permite tener un panorama el cual identifique en dónde se encuentran los limites de seguridad, por ejemplo en la validación. En un escenario sencillo, nuestra aplicación ASP.NET contaría con un servidor en le cual se realiza el hosting (IIS) de la misma, un servidor donde se almacenan los datos (SQL) y por último el formulario de autenticación que estaría brindando la aplicación ASP.NET. Descomponer la aplicación : Identificar los ambientes confiables que rodean a todos los componentes de la aplicación. Para cada subsistema, considere como son subidos los datos, la entrada del usuario o si las llamadas del código son seguras y considere cómo son autenticados y autorizados el usuario y el código. Adicionalmente considere las relaciones de confianza entre los servidores. Analizando el flujo de datos entre diferentes subsistemas, conocerá cómo los mismos se intercambian entre diferentes ambientes de seguridad. Considere todos los puntos de entrada de la aplicación, tales como páginas web, sockets, etc. Incluso aunque esos puntos de entrada se utilicen para que la aplicación de comunique internamente, son potenciales rutas de ataque. Considere el código que accede a recursos tales como servidores DNS, variables de ambiente, log de eventos y servicios web entre otros. Cualquier código que demande privilegios especiales, requiere una vigilancia especial. Genere un perfil de seguridad de la aplicación, documentando las características de diseño e implementación de la entrada de datos del usuario, la autenticación, autorización, manejo de configuración y el resto de las áreas donde la aplicación es mas vulnerable. Identificar la amenaza: Tipos de amenazas de Host – Aplicación – Red. Usar la teoría de STRIDE para la averiguación de potenciales amenazas. STRIDE: S poofing (ejemplos podrían ser la falsificación de mails) T ampering (ejemplos de tampering podría ser la alteración de datos durante la transmisión de los mismos) R epudation (ejemplos de estos casos serian, el borrado de archivos críticos) I nformation desclosure (exposición de información en mensaje de error, exponer código en paginas Web) D enial of Services (impedir que ciertos servicios se ejecuten correctamente por sobre carga de peticiones) E levation of Privilege (correr alguna aplicación con privilegios elevados por fallas en el desarrollo del software.) Documentar amenazas : en este caso es muy importante tener documentado todos los problemas que han aparecido durante el desarrollo e implementación de la aplicación, cuales fueron los riesgos que se corrieron y cuales fueron las contramedidas que se tomaron para solucionar el bugs. Todo esto es de gran ayuda debido a que en futuras amenazas uno puede contar con la documentación necesaria para tomar las medidas necesarias. Evaluar Amenazas : Evaluar las amenazas según la formula Riesgo = Probabilidad * Daño potencial El modelo DREAD es usado para refinar el cálculo anterior y agregar una dimensión adicional para medir el impacto. D amage potential: (Daño potencial) Cuánto daño puede la amenaza realizar en el sistema? R eproducibility: (Reproducción) Cuán difícil es reproducir la amenaza? E xploitability: (Explotabilidad) Cuán fácil es para los hackers, lograr explotar la amenaza? A ffected users: (Usuarios afectados) Cuántos usuarios se verían afectados? D iscoverability: (Descubrimiento) Cuán difícil es descubrir la amenaza? Las aplicaciones y compañías usan criterios diferentes para diferentes elementos del modelo DREAD. La fórmula usada para calcular el ranking no es importante debido a que los valores derivados son relativos entre ellos. Sólo debe ser consistente.
Consideraciones de seguridad: Al iniciar el proceso : se debe tener en cuenta en el momento de tomar la decisión de cómo va a funcionar la aplicación, el verificar los roles de los participantes en la utilización de la aplicación. A través del desarrollo : durante el desarrollo se debería verificar que toda la información relevada para el desarrollo de la aplicación esta correctamente implementada. A través de la distribución : también tenemos que tener mucho cuidado en el momento de la distribución de la aplicación, y que la misma no se realice con privilegios mas elevados de los que se necesita. A través de las revisiones : y por ultimo en el momento de realizar el desarrollo de actualizaciones en donde se deben mantener el mismo nivel de seguridad que en el momento del desarrollo inicial, puesto que la corrección de errores detectados no deberían a su ves generar nuevos.
Una tarea altamente recomendada podría ser involucrar al equipo de tester desde el inicio del desarrollo, porque este equipo no sólo se encarga de corroborar el correcto funcionamiento de la aplicación verificando que lo pedido por el cliente se cumpla, si no también verifica que todo el código desarrollado cumpla con los niveles de seguridad previstos. Dentro de estos testeos se podrían realizar como practicas recomendadas, la de correr la aplicación con cuentas de usuarios que no deberían ser corridas, de esta manera se puede verificar si una parte especifica de la aplicación debería estar corriendo con un nivel de seguridad en particular. Por qué tendríamos que hacer este tipo de verificación? Es muy sencillo, la mayoría de los hackers hacen este tipo de trabajos, corren aplicaciones con niveles de seguridad no previstos y de esta forma se generan las vulnerabilidades. Por ultimo no se olvide de bajar todos los servicios no necesarios ya sean para los servidores como para las estaciones de trabajo, puesto que esta, es otra de las vulnerabilidades que normalmente explotan los hacker.
Considere cualquier user input cómo dañina hasta confirmar lo contrario. Obtenga los input válidos y descarte cualquier otro. No realice lo contrario y controle los datos inválidos, los descarte y se quede con el resto. Los hackers pueden burlar la validación del lado del cliente por esto, debe validar adicionalmente del lado del servidor, antes de por ejemplo, almacenarla en una base de datos. Invalidar las entradas extremadamente largas. Invalidar las entradas con caracteres que contengan instrucciones de script tales como <script> u <object>, caracteres reservados de SQL como - -, INSERT, xp_cmsshell, o caracteres de archivos (..\\) Uno de los más poderosos mecanismos para restringir son los controles de validación y las expresiones regulares. Un ejemplo de una expresión regular podría ser: ( \\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)* ) la cual verifica que el user input es una dirección de E-Mail válida.
Notas para el instructor: Tiempo estimado 30 minutos. En esta práctica guiada, indicará a los alumnos cómo validar la entrada de datos de los usuarios. Genere una nueva aplicación web o Windows desde Visual Studio 2005. Agregue un cuadro de texto txtUsername y otro E-mail Configure las propiedades para que txtUsername no permita más de 20 caracteres. Agregue controles de validación para que ambos datos sean requeridos y el E-mail tenga un formato válido. Agregue un botón btnLogin Inserte código en el botón para dar la bienvenida si la entrada del usuario cumple con los requisitos de user input requeridos por la aplicación.
Criptografía La criptografía es utilizada para proporcionar: Confidencialidad . Para garantizar que se mantiene la privacidad de los datos. La confidencialidad suele lograrse mediante el cifrado. Los algoritmos de cifrado (que utilizan claves de cifrado) se utilizan para convertir texto normal en texto cifrado y el algoritmo de descifrado equivalente se utiliza para convertir el texto cifrado de nuevo a texto normal. Los algoritmos de cifrado simétricos utilizan la misma clave para cifrar y descifrar, mientras que los algoritmos asimétricos utilizan un par de claves: pública y privada. Integridad de los datos . Para garantizar la protección de los datos frente a modificaciones accidentales o deliberadas (maliciosas). La integridad suelen proporcionarla los códigos de autenticación de mensajes o valores hash. Un valor hash es un valor numérico de longitud fija derivado de una secuencia de datos. Los valores hash se utilizan para comprobar la integridad de los datos que se envían a través de canales no seguros. Se compara el valor hash de los datos recibidos con el valor hash de los datos que se enviaron para determinar si se alteraron los datos. Autenticación. Para garantizar que los datos proceden de un determinado usuario. Los certificados digitales se utilizan para proporcionar autenticación. Las firmas digitales suelen aplicarse a valores hash, ya que suelen ser considerablemente menores que los datos de origen que representan. Opciones técnicas Utilice un valor hash cuando necesite comprobar que los datos no han sufrido alteraciones durante el tránsito. Utilice un valor hash con clave cuando necesite demostrar que una entidad conoce un secreto sin enviar el secreto y volverlo a recibir, o cuando desee defenderse de intercepciones durante el tránsito mediante un valor hash sencillo. Utilice el cifrado cuando desee ocultar datos que se envían en un medio no seguro o al establecer la persistencia de los datos. Utilice un certificado cuando desee comprobar la identidad de la persona que declara ser propietario de la clave pública. Utilice el cifrado simétrico para mayor velocidad y cuando las dos partes conocen la clave. Utilice el cifrado asimétrico cuando desee intercambiar datos de forma segura a través de un medio no seguro. Utilice la firma digital cuando desee autenticar sin repudio. Utilice un valor salt (número aleatorio generado criptográficamente) para defenderse de los ataques de diccionario.
Criptografía simétrica Cuando hablamos de encriptación y no de transformación, ya estamos adentrándonos en temas de mayor protección, de algoritmos conocidos y seguridad real. El proceso de realizar una encriptación es complejo para ser entendido por nosotros mismos, pero no es limitante para conocer cuáles son los pasos para utilizarlos y qué errores no se deben cometer. Dentro de los algoritmos de encriptación simétrica podemos encontrar los siguientes, algunos más seguros que otros. DES ( Digital Encryption Standard ) Creado en 1975 con ayuda de la NSA ( National Security Agency ); en 1982 se convirtió en un estándar. Utiliza una llave de 56 bit . En 1999 logró ser quebrado (violado) en menos de 24 horas por un servidor dedicado a eso. Esto lo calificó como un algoritmo inseguro y con falencias reconocidas. 3DES ( Three DES o Triple DES ) Antes de ser quebrado el DES, ya se trabajaba en un nuevo algoritmo basado en el anterior. Este funciona aplicando tres veces el proceso con tres llaves diferentes de 56 bits . La importancia de esto es que si alguien puede descifrar una llave, es casi imposible poder descifrar las tres y utilizarlas en el orden adecuado. Hoy en día es uno de los algoritmos simétricos más seguros. IDEA ( International Data Encryption Algorithm ) Más conocido como un componente de PGP (encriptación de mails ), trabaja con llaves de 128 bits . Realiza procesos de shift y copiado y pegado de los 128 bits , dejando un total de 52 sub llaves de 16 bits cada una. Es un algoritmo más rápido que el DES, pero al ser nuevo, aún no es aceptado como un estándar, aunque no se le han encontrado debilidades aún. AES ( Advanced Encryption Standard ) Este fue el ganador del primer concurso de algoritmos de encriptación realizado por la NIST ( National Institute of Standards and Technology ) en 1997. Después de 3 años de estudio y habiendo descartado a 14 candidatos, este algoritmo, también conocido como Rijndael por Vincent Rijmen y Joan Daemen, fue elegido como ganador. Aún no es un estándar, pero es de amplia aceptación a nivel mundial. En nuestra demo utilizaremos el algoritmo AES. .NET provee implementaciones de AES, DES y TripleDES entre otros. El algoritmo más seguro hoy el AES, aunque 3DES también es muy seguro. Este último se utiliza cuando hay necesidad de compatibilidad. AES 128 es aproximadamente 15% más rápido que DES, y AES 256 sigue siendo más rápido que DES. Cualquiera de estos algoritmos utiliza los siguientes dos elementos; ninguno de los dos debe pasarse por alto ni subestimar su importancia: IV (Vector de inicialización) Esta cadena se utiliza para empezar cada proceso de encriptación. Un error común es utilizar la misma cadena de inicialización en todas las encriptaciones. En ese caso, el resultado de las encriptaciones es similar, pudiendo ahorrarle mucho trabajo a un hacker en el desciframiento de los datos. Tiene 16 bytes de largo. Key (llave) Esta es la principal información para encriptar y desencriptar en los algoritmos simétricos. Toda la seguridad del sistema depende de dónde esté esta llave, cómo esté compuesta y quién tiene acceso. El largo de las llaves depende del algoritmo. Al final del documento se darán algunas recomendaciones para el almacenamiento, generación y rotación de llaves. Algoritmo Largos válidos ( bits) Largo por defecto ( bits) DES 64 64 (8 bytes ) TripleDES 128, 192 192 (24 bytes ) Rijndael 128, 192, 256 256 (32 bytes )
Criptografía Asimétrica La encriptación asimétrica permite que dos personas puedan enviarse información encriptada, sin necesidad de compartir la llave de encriptación. Se utiliza una llave pública para encriptar el texto y una llave privada para desencriptar. A pesar de que puede sonar extraño que se encripte con la llave pública y desencripte con la privada, el motivo para hacerlo es el siguiente: si alguien necesita que le envíen la información encriptada, deja disponible la llave pública para que quienes le desean enviar algo lo encripten. Nadie puede desencriptar algo con la misma llave pública. El único que puede desencriptar es quien posea la llave privada, quien justamente es el que recibe la información encriptada. Los algoritmos de encriptación asimétrica más conocidos son: RSA ( Rivest, Shamir, Adleman ) Creado en 1978, hoy es el algoritmo de mayor uso en encriptación asimétrica. Tiene dificultades para encriptar grandes volúmenes de información, por lo que es usado por lo general en conjunto con algoritmos simétricos. Diffie-Hellman (& Merkle ) No es precisamente un algoritmo de encriptación sino un algoritmo para generar llaves públicas y privadas en ambientes inseguros. ECC ( Elliptical Curve Cryptography ) Es un algoritmo que se utiliza poco, pero tiene importancia cuando es necesario encriptar grandes volúmenes de información. El tamaño de la llave es el siguiente: Algoritmo Largos válidos ( bits) Largo por defecto ( bits) RSA 384 a 16.384 (incrementos de a 8) 1.024
Qué es firma digital? La firma digital le permite asegurarse que los datos que recibe no fueron comprometidos, y a conocer la identidad de quien los envió. Para generar una firma digital, quien envía los datos realiza un hashing de los datos y luego encripta ese hash con su clave privada. Entonces, envía los datos y la firma al destinatario. El destinatario realiza el hash sobre los datos y desencripta la firma usando su clave pública. Si el valor del hash y la firma desencriptada , coinciden, los datos están íntegros. Si no coinciden, ocurre alguna de las siguientes posibilidades: Los datos fueron modificados en el camino. Los datos no fueron firmados con la clave privada correspondiente a la clave pública que posee el destinatario. Usted puede combinar firmas digitales y encriptación para proteger datos confidenciales y asegurar su integridad.