miércoles, 30 de enero de 2008

Diseño de especificaciones de seguridad (3 de 3)

Unos conceptos muy importantes relacionados con la seguridad son los de autenticar (demostrar que se es quien se dice ser) y autorizar (establecer que puede y que no puede hacer el usuario por ser quien es)

Para diseñar una estrategia de autenticación y autorización se necesita:

  1. Identificar los recursos.
  2. Seleccionar la estrategia de autorización.
  3. Seleccionar las identidades empleadas para acceder a los recursos.
  4. Considerar el flujo de identidad.
  5. Seleccionar el enfoque de autenticación.
  6. Decidir como debe fluir la identidad.
Con esta triada damos por finalizado (de momento) este repaso a conceptos generales relacionados con la seguridad.

martes, 29 de enero de 2008

Diseño de especificaciones de seguridad (2 de 3)

Continuemos viendo las especificaciones de seguridad. Como hemos identificado en el post anterio existen diferentes tipos o categorias de amenazas. Su concimiento nos permite crear un plan o metodología para contemplar una posible respuesta a dichos tipos de amenazas.

Con el fin de tener un guión a la hora planificar esta tarea podemos identificar una serie de pasos para crear un modelo de amenazas son:

  • Organizar una reunión de tormenta de ideas.
  • Aplicar la organización de categorías de seguridad STRIDE.
  • Listar todas las posibles amenazas.
  • Crear apuntes.
  • Investigar.
  • Clasificar el riesgo de cada amenaza.
Por supuesto estas actividades deben tener su soporte tecnológico. Los grandes fabricantes de entornos de desarrollo están ampliamanete sensibilizados con los problemas de seguridad (más les vale) y portan tecnología out-the-box para la correcta gestión de la seguridad de las aplicaciones que sobre ellos se desarrollan.

Por ejemplo, las características de seguridad del Microsoft .Net Framework incluyen:

  • Validaciones de Tipo seguro
  • Firmado de código.
  • Encriptación y firmado de datos.
  • Seguridad de acceso al código.
  • Seguridad basada en roles.
  • Almacenamiento separado.

Finalizaremos en el siguiente post.

¿Por que no se puede viajar más rápido que la velocidad de la Luz?

Todos hemos oído alguna vez que nada puede viajar más rápido que la luz (300.000 km/s) pero alguna vez se han parado a pensar porque ocurre esto. Pues la explicación se la debemos (como no!!) a Albert Einstein.

Hay dos razones por las que es la velocidad límite:
  1. Einstein demostró que la masa de un objeto es más grande cuanto mayor sea su velocidad. Como es fácil deducir, cuanto mayor sea su masa más trabajo nos costara mover el objeto. De hecho, a la velocidad de la luz, la masa del objeto se vuelve infinita, por lo que es imposible acelerarla más. Esta teoría se demuestra en aceleradores de protones donde se envían electrones y protones a una velocidad cercana a la de la luz y se observa como su masa va creciendo.

  2. La segunda razón tiene que ver con el tiempo. Cuanto más rápido nos movemos más se ralentiza el tiempo. De echo al llegar a la velocidad de la luz el tiempo se detiene (y al sobrepasarla iría hacia atrás!!). Este fenómeno se demuestra también en aceleradores de partículas. Por ejemplo los neutrones son inestables y decaen al de pocos minutos. Sin embargo si se acelera hasta una velocidad similar a la de la luz tarda horas en decaer puesto que su reloj interno se ralentiza.
Espero que les haya resultado interesante.

Diseño de especificaciones de seguridad (1 de 3)

Vamos a analizar algunos aspectos relativos a la seguridad de las aplicaciones. Primero veamos los tipos más comunes de vulnerabilidades de seguridad:

  • Contraseñas débiles.
  • Software des-configurado o mal configurado.
  • Ingeniería social.
  • Conexiones de Internet.
  • Transferencia de datos sin encriptar.
  • Desbordamiento de buffer.
  • SQL Injection.
  • Secretos en código.

El conocimiento de dichos tipos de vulnerabilidades nos permite realizar una planificación más detallada de los pasos a seguir y aspectos a tener en cuenta.

Los pilares para crear una estrategia de seguridad incluyen:

  • Confiar en sistemas de seguridad probados.
  • Nunca confiar en las entradas externas.
  • Asumir que los sistemas externos no son seguros.
  • Aplicar el principio de mínimos privilegios.
  • Reducir la disponibilidad de componentes y datos.
  • Colocar como modo por defecto el modo seguro.
  • No confiar en la seguridad por ocultación.
  • Seguir los principios de STRIDE.
Continuaremos con el siguiente post.

jueves, 24 de enero de 2008

Diseño de la capa de datos (3 de 3)

Más aspectos a tener en cuenta en la capa de datos:

  • La normalización es el proceso progresivo de refinamiento del modelo lógico con el fin de eliminar los duplicados y las mermas de espacio de la base de datos.

  • El resultado de la normalización es reducir las inconsistencias y hacer más rápida las modificaciones de los datos.

  • Denormalizar es el proceso de deshacer una normalización para generar tabas con más campos que requieran menos Joins lo que implique una mejora del procesamiento de las Querys.

  • La integridad de datos hace referencia a la consistencia y precisión de los datos.

    • La integridad de dominio especifica un conjunto de valores de datos legitimados para una columna y determina si el valor nulo será admitido.

    • La integridad de Entidad requiere que cada fila en una tabla posea un identificador único, conocido como el valor de clave primaria.

    • La integridad referencial asegura que las relaciones entre claves primarias y claves extranjeras son siempre mantenidas.

Diseño de la capa de datos (2 de 3)

Sigamos analizando aspectos importantes de la capa de datos:

  • Los tipos de datos especifican la clase del dato que será almacenado en un campo y como ese dato será representado.

  • Las claves únicas identifican cada instancia de una entidad dentro del modelo de datos.

  • Las claves extranjeras unen dos tablas en una base de datos.

  • Las relaciones entre las entidades se representan añadiendo las claves de una entidad en las otras tablas.

  • Para optimizar las prestaciones de una base de datos usted necesita:
    • Optimizar su base de datos.
    • Realizar pruebas de estrés a la aplicación.
    • Usar transacciones ajustadamente.
    • Comunicar efectivamente cruzando los limites.
  • Un índice es una lista ordenada de filas en una tabla que el DBMS puede emplear para acelerar las operaciones de búsqueda.

  • Puede optimizar la velocidad de procesamiento de tablas muy grandes participando sus datos, tanto vertical (de una tabla a varias con la misma clave primaria y diferentes columnas) como horizontalmente (de una tabla a varias que contengan las mismas columnas).
Continuamos en el próximo post.

Diseño de la capa de datos (1 de 3)

Vamos a comenzar una serie de posts dedicados a hablar de la capa de datos en la arquitectura de tres capas tradicional. (Datos, negocio y presentación)

En la fase de planificación de la M.S.F., el equipo del proyecto analiza los requisitos de la solución y especifica como los datos serán estructurados, almacenados, accedidos y validados.

Algunos aspectos a tener en cuenta son:

  • Un esquema de base de datos refleja las entidades del problema, los atributos de dichas entidades así como las relaciones entre dichas entidades.

  • El modelo físico de datos de un DBMS define la estructura interna que dicho DBMS para mantener la gestión de dichos datos.

  • Los tres modelos físicos de datos que se emplean normalmente son los ficheros planos, el modelo jerárquico y el modelo relacional.

  • Las entidades y atributos que se derivan durante el diseño lógico son “mapeadas” por las tablas, campos y relaciones en la base de datos.

  • Las tablas son la representación física de las entidades en una base de datos relacional.

  • Las columnas son la representación física de las propiedades en una base de datos relacional.
Seguimos en el próximo post.

miércoles, 23 de enero de 2008

Distribución y capas de la aplicación

Nunca está de más repasar algún concepto básico de la arquitectura del Software.

Un aspecto a considerar a la hora desarrollar un proyecto relacionado con el Software es el método de distribución de la aplicación. Se debe tener en cuenta que las n capas lógicas no tienen que traducirse necesariamente en n capas distribuidas físicamente.

De echo, esta separación física implica una serie de tareas de configuración desde el punto de vista de Sistemas (visibilidad, rendimiento, configuración de firewalls...) y empobrece el rendimiento de la misma, al obligar a realizar una serie de serializaciones y envíos de red que no realizaría sin dicha distribución.

Por otro lado, aporta una poderosa escalabilidad puesto que pueden crecer los requisitos de procesamiento de las diferentes capas, permitiendo una respuesta efectiva. (Clustering, Granja de Servidores, mejor y más potente Hardware)

Como conclusión podemos afirmar que no siempre que haya capas se distribuirá físicamente una aplicación, pero si para poder distribuirla se ha tenido que desarrollar en capas.

viernes, 18 de enero de 2008

Phishing de lo más cutre

Hoy he recibido un mensaje de correo electrónico intentando hacer un Phishing que es de los más cutres que he visto nunca:



El texto dice:

"Debido a las ediciones recientes que aparecieron al la caixa servicio online estamos actualment lanzar un nuevo sistema de la seguridad para parar los escapes de la información.
Para beneficiar de las nuevas instalaciones seguir por favor el acoplamiento abajo.
Para poner al día tu estado de cuenta ***AUTHENTICAR*** y terminar por favor los pasos necesarios.
****Advertencia**** Si no terminas los pasos siguientes tu cuenta se puede exponer a las acciones del fraude. No contestar por favor a este mensaje. Para cualquier investigación, entrar en contacto con el Servicio de Cliente.

"

Usando la traducción automática las cosas no quedan bien rematadas...

En fin, sin más comentarios.

Microsoft y el patrón MVC (Vista Controlador Modelo)

Microsoft planea liberar el patrón Vista-Controlador-Modelo (M.V.C.) para desarrolladores de ASP.NET en la primera mitad de este año. M.V.C. representa un paradigma que interesa a muchos desarrolladores.

Esta muy bien que Microsoft haga estándar "de facto" el uso de ciertos patrones a través de sus herramientas, puesto que estas características "out of the box" hacen que la comunidad de desarrolladores sobre tecnologías Microsoft (la media al menos) de un paso hacia delante.

Por otro lado, debemos decir que el patrón M.V.C. no es nuevo ni mucho menos, que la gente de Java lo conoce y emplea hace unos cuantos años y que la propia gente de Microsoft tenia una implementación del mismo muy interesante a través de un Application Block (User Interface Process Application Block for .NET me parece recordar...)

No obstante, buena noticia para la comunidad de desarrolladores con herramientas de Microsoft.

miércoles, 16 de enero de 2008

Sun Microsystems compra MySQL AB

Hoy se ha anunciado que Sun Microsystem ha firmado un acuerdo definitivo para adquirir MySQL AB, un icono del open-source por aproximadamente 1000 millones de dólares.

Más información...

Triangulo de tradeoff

En los proyectos, existe una clara relación entre las diferentes variables como son: recursos, calendario y características que lo componen. La relación entre dichas variables se ilustra en la siguiente figura:




Como se ve en la imagen, cualquier cambio en uno de los factores implica que se producirán cambios inevitablemente en los demás. La clave para desarrollar una solución se encuentra en el correcto balanceo entre los recursos, fechas de despliegue y características.

A menudo, el equipo del proyecto es reacio a reducir el numero de características de la solución. El triangulo de tradeoff ayuda a explicar las limitaciones y presenta las opciones a sacrificar.

Como manejar los tradeoffs

Antes de nada me gustaría aclarar que la palabra "tradeoff" en castellano significa "sacrificar una cosa por otra". La mantengo en los post por ser un tecnicismo empleado y por mantener una mayor legibilidad en el texto.

Los proyectos frecuentemente fallan, sufren grandes retrasos o exceden el presupuesto planificado. Que el proyecto tenga un alcance ambiguo puede contribuir o ser la causa de estos problemas. El alcance del proyecto especifica que hará o no la solución. Para definir y gestionar correctamente el ámbito de un proyecto de software se debe:
  • Identificar las restricciones del proyecto.
  • Gestionar los tradeoffs del proyecto.
  • Establecer un control de cambios.
  • Monitorizar los avances del proyecto.
En el proceso de identificar y gestionar los tradeoffs del proyecto no es necesario reducir las características de la solución, pero la identificación de tradeoffs puede implicar una reducción de características.

Dicha gestión provee un mecanismo estructurado para balancear todas las partes del proyecto al darse cuenta de que no puede atender todos los objetivos al mismo tiempo. Tanto el cliente como el equipo debe revisar los tradeoofs y estar preparado para tomar decisiones dificiles. El triangulo de tradeoffs y la matriz de tradeoffs son las dos herramientas que la M.S.F. emplea para gestionar dichos tradeoffs.

En el próximo post veremos el triangulo de tradeoffs

martes, 15 de enero de 2008

Las bases genéticas de la ansiedad y la tristeza

Hoy comienzo una nueva serie de post sobre otro tema que me interesa especialmente, la ciencia y el cerebro.

En la sociedad actual existe un gran problema de ansiedad y depresiones. Dichos problemas radican en el cerebro, pero ¿como funciona dicho proceso?

El cerebro humano tiene miles de millones de neuronas que forman un sistema de comunicación que se envian mensajes de una a otra en forma de impulsos eléctricos. Estos impulsos de una neurona a otra se convierten en señales químicas. Ciertas disfunciones en estas sustancias qúimicas estan en la base de la enfermedad depresiva.

  • La depresión severa se manifiesta por una combinación de síntomas, que interfieren la capacidad de trabajar o estudiar del individuo.

  • La distemia es una depresión menos grave pero que también interfiere en la forma de actuar de la persona.

  • En el trastorno bipolar llamado enfermedad maníaco-depresiva la persona afectada pasa de estados de animo alto o euforia a estados de animo bajo.
Como en muchas disfunciones cerebrales la depresión también presenta un a predisposición genética a padecerla. Es bastante corriente en la vejez. La O.M.S. ha concluido que la depresión es el cuarto problema de salud del mundo, ya que afecta a unos 340 millones de personas de todo el planeta.

El trastorno de ansiedad generalizada también está muy extendido entre la población, afecta a 183 millones de personas, la mayoría mujeres. La ansiedad sirve para enfrentarse a situaciones amenazantes, sirve para actuar y estar alerta. Sin embargo esta situación tan util puede ser contraproducente si hay un trastorno. En lugar de una situación adaptada a las circunstancias, la ansiedad se convierte entonces en una situación de estrés constante, fatiga, dificultad para concentrarse, irritabilidad...

Todos conocemos a alguien en estas situaciones, más en una profesión como el desarrollo de Software con tantas presiones de fechas y económicas.

Por lo tanto, si queremos ser productivos, debemos estar alerta respecto a estos factores y ser capaces de manejar la ansiedad evitando que nos domine y nos haga perder el control.

Atajos de teclado para C# en Visual Studio 2008

Ya existe el mapa de atajos de teclado de C# del Visual Studio 2008.

Si lo desean, aquí lo pueden descargar.

Diseño de la capa de presentación (2 de 2)

Existen diferentes tipos de modelos de Interfaz de usuario:
  • Basados en escritorio.
  • Basados en Web.
  • Basados en dispositivos móviles.
  • Basados en documentos.
La ayuda o asistencia técnica se puede proveer a través de cualquiera de las siguientes opciones:

  • Ayuda on-line.
  • Tooltips.
  • Información de estado.
  • Asistentes.
  • Ayuda de accesibilidad.

Para interfaces de usuario de mayor complejidad, podemos plantearnos la posibilidad de desarrollar componentes de proceso de Interfaz de usuario. Dichos componentes de proceso de interfaz de usuario son típicamente implementados en clases que exponen ciertos métodos que pueden ser invocados por los interfaces de usuario.

Estos componentes de proceso coordinan que elementos del interfaz de usuario mostrar. Son abstractos de la forma de representación así como de la funcionalidad de adquisición de datos provista en los componentes de Interfaz de Usuario.

lunes, 14 de enero de 2008

SAF (Strategic Architect Forum).

Durante el pasado Noviembre, se desarrolló en las oficinas de Microsoft Corp. el Strategic Architect Forum, donde se trataron temas como el mundo del Software y los servicios, Data Services para la Web, VoIP, experiencia de usuario para arquitectos entre otros.

Aquí (en inglés) todas las sesiones grabadas en video, transcripciones y presentaciones completas de los 3 días.

Diseño de la capa de presentación (1 de 2)

El diseño de cualquier aplicación no está completo sin especificar la manera en que los usuarios interactúan con el sistema.

La interacción con el usuario se realiza a través de la capa de presentación.

Dicha capa de presentación es la parte de la aplicación que provee el mecanismo de comunicación entre el usuario y la capa de servicios de negocio (capa de negocio) del sistema.

La capa de presentación más simple contiene los componentes de interfaz de usuario, por ejemplo formularios Web. Para interacciones más complejas puede diseñar componentes de proceso de usuario que orquesten los elementos de interfaz de usuario y controlen la interacción con el usuario.

Los componentes de interfaz de Usuario muestran los datos a los usuarios, adquieren y evalúan los datos introducidos por este e interpretan los gestos de los usuarios que indican que el usuario desea realizar una operación sobre los datos.

Además la interfaz de usuario debe filtrar las acciones presentado solo las que tengan sentido en un momento concreto.

Las características que un buen interfaz posee son:

  • Diseño intuitivo.
  • Empleo óptimo del espacio de la pantalla.
  • Fácil navegación.
  • Navegación controlada.
  • Validación de datos de entrada.
  • Menús, barras de herramientas y ayuda.
  • Tratamiento eficiente de eventos.
En el próximo post seguiremos hablando de la capa de presentación

jueves, 10 de enero de 2008

Globalización y Localización (en informática, claro)

la definición de estos términos en el ámbito de la arquitectura informática es el siguiente:

  • Globalización es el proceso de diseñar y desarrollar un producto de Software que funcione en múltiples culturas y localizaciones.

  • Localización es el proceso de adaptar una aplicación globalizada a una cultura y localización particular.

Existen diferentes técnicas para implementar dichas características, pero como norma general tanto los diseñadores como los desarrolladores deben tener en cuenta que cualquier concepto, formato o literal susceptible de variar en diferentes culturas debe ser especificado en un artefacto aparte de la aplicación, con el fin de que pueda ser sustituido por otro en base a la cultura-localización del usuario.

miércoles, 9 de enero de 2008

Reto matemático 2

Si listamos todos los número naturales por debajo del 10 que son múltiplos de 3 o de 5 obtenemos 3,5,6 y 9. La suma de esos números es 23.

Encuentre la suma de todos los múltiplos de 3 o 5 por debajo de 1000.

Resultado del Reto Matemático 1

Pues el resultado del Reto Matemático 1 es:

104743

Este es el número primo que ocupa la posición 10.001

Si desean descargarse la implementación en C# (2.0) de una posible solución pueden hacerlo de aquí

Que es el modelo de amenazas STRIDE? 2 de 2

  • Information disclosure (Revelación de información)
    Un usuario sin autorización obtiene datos privados, como números de tarjetas de crédito y fechas de espiración.

  • Denial of service (Denegación de servicio)
    Cualquier ataque que intenta evitar el acceso a un recurso computacional. Los ataques DoS pueden provocar:

    • Que una aplicación o el S.O deje de funcionar.
    • Utilización masiva de CPU en cálculos innecesarios.
    • Consumo de memoria del sistema de tal modo que se dañen las funcionalidades de las aplicaciones o del sistema operativo.
    • Reducción de ancho de banda.

  • Elevation of privilege (Escalada de privilegios)
    Un usuario consigue mayores privilegios que los planificados por el administrador, creando un usuario malintencionado para lanzar ataques de las demás categorías o amenazas de seguridad.

Pues ya tienen el STRIDE. No me digan que no es interesante.

martes, 8 de enero de 2008

Que es el modelo de amenazas STRIDE? 1 de 2

El modelo de amenazas es una técnica empleada para identificar y categorizar las amenazas de una aplicación.

  • Spoofing identity (Suplantación de Identidad)
    Un usuario malintencionado se hace pasar por una entidad de confianza.
    NOTA:
    IP spoofing es un caso especial de suplantación de identidad. Ocurre cuando un usuario malintencionado inserta una falsa dirección I.P. en una transmisión por Internet de tal manera que dicha transmisión parezca que proceda de una fuente segura. De esta manera el usuario malicioso puede conseguir acceso a un sistema.

  • Tampering (Falsificación)
    Un usuario consigue acceso autorizado a un ordenador y cambia sus operaciones, configuración o datos.

  • Repudiation (Repudio)
    Un administrador de sistemas o agente de seguridad es incapaz de probar que el usuario malicioso ha realizado cierta acción.

Ya tenemos STR... el próximos post el resto.

Bases para la creación de aplicaciones seguras.

Existen algunos conceptos a tener en cuenta a la hora de valorar la seguridad de nuestras aplicaciones:
  • Confiere en los sistemas de seguridad probados y testados. (relativamente, claro)
  • Nunca confíe en las entradas externas.
  • Asuma que los sistemas externos no son seguros.
  • Aplique los principios de privilegios mínimos.
  • Reduzca la disponibilidad de componentes y datos.
  • Por defecto, establezca un modo seguro.
  • No confíe en la seguridad por ocultación.
    Que no tenga ningún enlace no protege el fichero. (menos si Google nos lo indexa ;))
  • Siga los principios del STRIDE. (spoofing identity, tampering, repudiation, information disclosure, denial of service, and elevation of privilege.)
Aun con todos estas características puede que su aplicación no sea segura, pero tenarlos a la vista puede ser un buen hábito.

Saludos y feliz 2008 recién estrenado...