martes, 16 de junio de 2015

Importancia de la Seguridad en las Redes Wifi

Las redes inalámbricas están basadas en la tecnología 802.11, pero antes de analizar los riesgos en los cuales podría estar la información que manejamos en nuestros computadores, tabletas, celulares o cualquier otro dispositivo que se conecte vía wifi a internet, es importante establecer la diferencia que existe entre la conexión común que es por Cable y la red sin claves, la diferencia se deriva del medio físico y que al conectarnos por cable tendremos el 100% de los recursos de ancho de banda, y la conexión se realiza por un cable al puerto del router, en cambio por la red wifi, nos da más comodidad para movilizarnos sin perder la conexión y encontramos la red por medio de ondas de radiofrecuencia como la televisión o la radio.

Riesgos de seguridad en las redes wifi

Cuando se trata de evaluar los riesgos que supone contar con una red inalámbrica en nuestra casa o empresa, se tiene en cuenta el tema de la distancia, que a pesar de que existe un estándar para conectarse a una red  a una distancia de máximo 100 metros, es posible que esto no sea del todo cierto, ya que los equipos de red del atacante como de la red puede contar con tecnología para superar esta distancia, aquí también juegan un papel fundamental otros factores como los obstáculos, la densidad de los mismos, la potencia de transmisión, la sensibilidad de transmisión  y la utilización de antenas de alto alcance.

Los atacantes sobre Redes wifi son clasificados de la siguiente forma:

a)      De Negación de Servicio: Este ataque compromete la disponibilidad de la red wifi, mediante la técnica de producir excesivo ruido en las frecuencias de la red wifi, lo cual haría imposible que los dispositivos se pudieran conectar, este ataque puede ser utilizado en entornos críticos como redes inalámbricas de monitorización de hospitales o infraestructuras críticas.
b)       Inyección de Tráfico: Aquí es donde un atacante modifica el comportamiento de la red , por medio de la inyección de tráfico

c)      Acceso a la red: El atacante establece una conexión no autorizada con la red wifi, y de esta forma disponer de acceso completo de la red, aquí afecta la integridad de las comunicaciones.

Como las redes inalámbricas son señales que viajan por el aire, no es tan complejo para un atacante interceptar los paquetes de datos que viajan por la red, si estos no están cifrados, este ataque es indetectable y afecta la confidencialidad de las comunicaciones
En la actualidad existen diferentes tecnologías para configurar redes wifi como WEP, WPA y WPA2, 802.1x, etc.

Aunque esto implica diversas tecnologías para configurar la seguridad en la red wifi, se debe tener en cuenta dos aspectos importantes para garantizar los accesos no autorizados.

a)      Cifrado de Comunicaciones: para evitar que nadie pueda capturar los paquetes enviados en la red y acceder a ellos.
b)      Control de acceso a la red: por lo general cuando se contrata una conexión wifi, los puntos de acceso vienen por defecto abiertos, de esta forma cualquiera podría capturar el tráfico de la red o conectarse a la misma.
En ocasiones el proveedor de la red, dispone de un sistema de configuración tipo WEP (Wired Equivalent Privacy), el cual es considerado inseguro, pues a pesar de contar con clave de acceso y utilizar el algoritmo de cifrado RC4 y adicional el protocolo HTTPS, fue diseñada de forma vulnerable, de manera que un atacante equipado con tecnología podría obtener la clave en corto tiempo y vulnerar la red wifi.
Se recomienda que para las redes de tipo personal, se utilice bajo el protocolo WPA2 (Wireless Protected Access 2) en su variante  Personal, con claves con más de veinte dígitos tanto para la red como para los clientes.
Existen dos formas de configurar este tipo de redes WPA2:
a)      TKIP (Temporal Key Integrity Protocol)
b)      AES (Advanced Encryption Standard), esta es la más segura  pues cuenta con los mecanismos de encriptación actuales.

Para las redes empresariales también se puede utilizar de la forma WPA2 Personal, en su variante corporativa o Enterprise, estas utilizan un servidor RADIOUS (Remote Authentication Dial in User Service), generando contraseñas aleatorias y robustas con los protocolos 802.1x y EAP (Extensible Authentication Protocol).
Además de todos estos medios de seguridad, la compañía debe contar con un software para detectar intrusos en la red, para conocer cómo se está comportando la red wifi.
Los mecanismos ya conocidos para reducir el riesgo en la seguridad en las redes wifi, como por ejemplo la ocultación del nombre o la validación por la dirección pueden ayudar, pero un atacante con los conocimientos necesarios podría vulnerar la seguridad de estas.

Ingeniería de Software




En la actualidad la utilización de la tecnología del software marca una pauta diferenciadora entre las empresas en sus procesos de calidad, es por eso imperante para los profesionales que comprendan las características únicas del software y el enfoque usado para desarrollar y mantener el software.
Este artículo les dará una visión de que es el software y cuáles son los objetivos y elementos de la Ingeniería de Software, además abordaremos los conceptos del Ciclo de Vida del software y metodologías actuales.

¿Qué es el Software?
Importante diferenciador en el negocio y que corresponden a los programas y documentación asociada tal como requisitos, modelos de diseño y manuales de usuario.

Tipos de Software de acuerdo a objetivos Comerciales
Por lo general los Ingenieros de Software no parten de cero para la implementación del software, sino que corresponde a la reutilización del software existente, refinado con la mejor calidad.
Para que un software satisfaga las necesidades de los usuarios, debe cumplir con las siguientes características básicas:

Mantenibilidad (capacidad de poder mantenerse): el software debe evolucionar para cumplir con las necesidades de cambio, en las empresas los negocios son cambiantes, ya sea por regulaciones de ley, estrategias comerciales, nuevas directrices de la gerencia, etc. se debe contar con un producto que madure.

Fiabilidad: el software deber ser digno de confianza. Lo que significa que la integridad de los datos que presenta en consultas, reportes o cualquier otro medio de salida cuenta con total veracidad en la información.




Eficiencia: el software no debe hacer un uso derrochador de los recursos del sistema. Este es un punto de suma importancia debido a que por lo general en los servidores conviven varias aplicaciones que compartían recursos de memoria y de almacenamiento en disco duro, lo que nos indica que si una aplicación empieza en determinado momento a consumir demasiados recursos de memoria, terminará afectando el resto de aplicaciones instaladas en el servidor.


Aceptabilidad: el software debe ser aceptado por los usuarios para los que se diseñó. Esto significa que ha de ser entendible, usable y compatible con otros sistemas.

Componentes del Software
El software está compuesto por tres componentes:
Programas: Entregan la funcionalidad y rendimiento deseado o esperado por los usuarios, y que corresponden a las instrucciones escritas en lenguajes específicos que los computadores puedan interpretar y ejecutar.
Datos: Cuando el programa se coloca en marcha requiere unos datos iniciales para operar correctamente, de igual forma cuando se realizan las pruebas en el área de calidad, se necesitan datos, estos datos son contemplados cuando se diseña el programa, datos en la base de datos o archivos en ubicaciones específicas.
Documentos: Este componente cuenta con la descripción de todas las opciones del sistema, explicando los flujos de procesos que tiene la aplicación, que datos se necesitan para que una operación se realice correctamente, dado que en los programas existen opciones dependientes de otras.

El software se desarrolla
El software es un producto que se desarrolla bajo necesidades puntuales y aunque la ingeniería de software fomenta la reutilización de componentes, es muy poco probable de que un software sea igual a otro, pues no se diseña como los componentes de hardware de un computador, sino por las necesidades imperantes de los usuarios que cambian en la medida que cambia el negocio.
Para construir un producto de software es necesario entender cuál es la necesidad real de los usuarios y cuáles serían las ventajas de hacerlo y el impacto para el negocio de no hacerlo, luego de esto seleccionar el lenguaje y tecnología más apropiada para diseñarlo, por ejemplo para sistemas de aplicaciones Web, se pueden realizar en lenguaje PHP, ASP.NET, JAVA etc. y que motor de bases de datos utilizar es el de mayor ganancia teniendo en cuenta licencias, capacidad de almacenamiento y rendimiento se puede seleccionar bases de datos como PostgresSQ, Mysql , Sql Server, Oracle, etc.

Cambios en el software
A medida que surgen cambios en el negocio, la manera de realizar una negociación, puede impactar significativamente las aplicaciones de la empresa, por eso es muy importante mantener un registro de los mantenimientos que se van realizando, actualizaciones de consultas, reportes u opciones, sin que estos cambios afecten el normal funcionamiento de las demás opciones publicadas.
El software se construye a la medida
La construcción del software se da por incrementos en las opciones de acuerdo a los requerimientos específicos del cliente, y aquí es importante anotar que en la medida en que se pueda reutilizar componentes debe hacerse, valiéndonos de patrones de diseño y aplicación de las características de la programación orientada a objetos.
En mi experiencia he visto en negocios donde cuentan con programas a la medida para controlar sus operaciones con clientes con perfiles específicos, sin embargo una práctica poco útil que he visto es crear nuevos ambientes y bases de datos para clientes nuevos que ingresan a la operación , esto implica un alto costo en disco y mantenimiento,  que fácilmente puede ser solucionado por medio de las bondades de la PROGRAMACIÓN ORIENTADA A OBJETOS, aplicando la herencia y el polimorfismo, que nos enseñan a pasar propiedades a otros objetos y generar nuevos comportamientos dentro de la misma aplicación sin afectar los demás objetos.


CMMI -DEV en el desarrollo de Software



CMMI que traduce Capability Maturity Model Integration, es un modelo de madurez, para la mejora de procesos para el desarrollo de productos y de servicios; su objetivo es propósito es ayudar a las organizaciones a mejorar sus procesos de desarrollo y de mantenimiento, esto para los productos como los servicios.
El CMMI tiene clasificaciones las cuales son:
·         CMMI DEV: es un modelo para empresas que desarrollan y mantienen productos de software, ya sea para el uso o venta.
·         CMMI ACQ: es un modelo para empresa que tienen múltiples proveedores de desarrollo de software.
·         CMMI SVC: es un modelo para empresas que son proveedoras de servicios, ya sea de manera interna o externa.
De acuerdo a lo anterior nuestro para nuestro caso en particular se debe escoger el CMMI DEV que es el más adecuado para las características de nuestro proyecto.
CMMI DEV es un modelo que cubre las actividades para desarrollar productos y servicios, la practica de éste intentan cubrir el ciclo de vida del producto desde su concepción, entrega y mantenimiento, centrándose en el trabajo necesario para construir y mantener el producto en su totalidad minimizando los riegos y obstáculos, las prácticas del modelo son enfocadas al direccionamiento del desarrollo de requerimientos, soluciones técnicas, integración de productos, verificación y validación.

Este modelo tiene dos tipos de niveles: niveles de capacidad y niveles de madurez. Los cuales son aproximaciones para el mejoramiento de procesos.

Se enfoca en el Desarrollo y Mantenimiento aplicado a servicios y productos.

CMMI contiene constelaciones que son modelos aplicables al:

·         Desarrollo de Software
·         Gestión de Proyectos
·         Gestión de Procesos
·         Ingeniería de Sistemas
·         Ingeniería de Hardware
·         Ingeniería de Software
·         Otros Procesos de Soporte

Propósitos de las Áreas de proceso del CMMI-DEV:

Abajo he graficado un resumen de como el propósito de CMMI-DEV se adapta a nuestro proyecto:

domingo, 14 de junio de 2015

Análisis de Riesgos en Proyectos de Software






Los riesgos están inmersos en el desarrollo de todos los proyectos, incluso si no hablamos de software, sino de obras civiles o comerciales también hablaríamos de Riesgos, lo cierto es que el riesgo se relaciona con eventos futuros que afectan el normal curso de las actividades planeadas del proyecto y que necesariamente exigen de parte del equipo de trabajo encabezado por el líder de proyecto, un cambio o un toma de decisión para mitigarlo.

Los riesgos no deben suponer la realidad de “Catástrofes” en el cumplimiento o las entregas del proyecto, sino por el contrario una oportunidad para en un escenario diferente tomar en el proyecto mejores decisiones que impliquen cambios y favorezcan notoriamente el producto.

Considerando entonces el riesgo desde la Ingeniería de Software decimos que el Análisis y gestión del riesgo son una serie pasos que ayudarán al equipo de software a entender y manejar la incertidumbre que se susciten en el proyecto. Un riesgo es un problema potencial que puede hacerse realidad o no, pero que sin importar el resultado, es una buena práctica identificarlo desde un principio, evaluando cual es el porcentaje de probabilidad para que se haga  realidad y cuál sería su impacto.


Para aquellos que se vieron la película "Indiana Jones", recordarán que este personaje interpretado por Harrison Ford, cuando se enfrentaba a alguna dificultad decía:”¡No te preocupes, pensaré en algo!”, lo cual indicaba que el solo se preocupaba por los problemas cuando eran inminentes, de esta forma, hacia alguna acción valerosa que le resultaba bien, eso es muy parecido a lo que sucede en algunos equipos de desarrollo de software, quienes son “reactivos” ante los problemas y no los identifican antes, solo los enfrenta cuando tristemente aparecen.


En los proyectos de software  y en la mayoría de los proyectos de diversa clase, no es buena práctica hacer el papel de “bombero” para resolver, esto puede resultar muy tedioso y desgastante para el equipo, en este caso se deben contemplar todo aquello que amenaza nuestro proyecto para esto se deben realizar tres cosas claves:

·         Identificar riesgos potenciales
·         Estimar su probabilidad e impacto
·         Clasificarlos según su importancia


Luego de estos pasos se deben diseñar estrategias proactivas para la gestión del riesgo.

Riesgos del Software


Riesgos del proyecto

Los riesgos del proyecto afectan muchos aspectos del proyecto, pero principalmente afecta el calendario del proyecto y en consecuencia los costos iniciales pactados con el cliente, debido a que la mitigación del riesgo puede representar el aumento de participantes y recursos.

Riesgos Técnicos

Estos amenazan la calidad del software, cuando un riesgo técnico, por la implementación de un nuevo componente de generación de reportes sin que el equipo conozca las funcionalidades y ventajas de este o el grado de consumo de recursos del servidor y del explorador, puede traer graves consecuencias, en el diseño, desarrollo,  implementación y mantenimiento del software.

Riesgos de Negocios

Estos riesgos amenazan la viabilidad del proyecto:
1.       Diseñar y desarrollar un producto con calidad que en el mercado nadie quiere.
2.       Desarrollo de un aplicativo que ya no se acopla a las estrategias comerciales de la compañía.
3.       Desarrollo de un producto que la fuerza comercial no sabe cómo vender.
4.       Falta de financiamiento por parte de los altos ejecutivos del proyecto.

5.       Pérdida y falta de presupuesto para continuar con el proyecto.

Riesgos Impredecibles

En esta categoría se encuentran los más desafortunados, aquellos que no fueron detectados a tiempo, por más que los ingenieros de software se dediquen a invertir un tiempo tratando de identificarlos, estos son muy difíciles de encontrar , estos también merecen un tiempo considerable.

Identificación del riesgo


Este consiste en crear una lista de chequeo, con esta se pueden encontrar varios de los más comunes.


Bibliografía :  Ingenieria del Software, Un enfoque práctico. Roger S. Pressman Mc. Graw Hill

jueves, 11 de junio de 2015

Perfiles de Seguridad en el Desarrollo de Software


Agradeciendo esta vista de una capacitación en Desarrollo seguro de software en la ciudad de Bogotá, por la fundación OWASP


Seguridad Informática en el Desarrollo de Software

Seguridad Holística

El término "Holístico" indica que la Seguridad en el Desarrollo de Software, debe contemplarse como un todo, en terminos globales y no especificos, con un análisis en conjunto y no por sus partes por separado.

Para implementar un ambiente seguro de nuestras aplicaciones en la compañia donde trabajamos o en nuestra propia empresa, debemos analizar el panorama bajo el Triangulo de Hierro :

La implementación de seguridad en una compañía está dada por la aplicación de estos tres componentes:

Recursos: Recursos financieros, humanos y técnicos.


 Cantidad de Presupuesto destinado a colocar un margen seguridad rígida o flexible dentro de tu proyecto.

Tiempo: Los proyectos de software, cuentan con una calendarización de las actividades que realizará todos los miembros del equipo, en algunas ocasiones, la premura de los usuarios o socios que financian el proyecto, hace que no se le preste tanto detalle a tiempo invertido en aplicar seguridad a tu aplicación de software, todo esto debe colocarse en balanza en la negociación del proyecto y en su entrega final.

En algunas ocasiones el Project Manager debe apresurar el proyecto por los tiempos pactados de entrega y así es consciente de sacrificar algo de seguridad con el fin de darle satisfacción al cliente final con la entrega, con frases como "Entreguemos hasta aquí y le aplicamos seguridad después"...

A continuación se presentan estadísticas de pensar la seguridad en el desarrollo de software como un después:



Seguridad vs Usabilidad


Se debe colocar en una balanza los niveles de seguridad que se deben aplicar en el desarrollo de software, debido a que las soluciones informáticas han sido pensadas para mejorar el trabajo de las personas, haciéndolo más preciso, con un ambiente fácil de usar, muy intuitivo, de tal manera que si exageramos en la aplicación de la seguridad en todas las páginas del proyecto, el usuario que financia la implementación del software, terminará aborreciendo el aplicativo y echándolo a la caneca.

Ejemplo: Si le pides autenticarse cada 5 minutos, el usuario terminará incomodo con la solución y en lugar de representar un apoyo, se tornará un obstáculo en la consecución de los objetivos laborales.