jueves, 3 de septiembre de 2015



SEGURIDADES Y VULNERABILIDADES EN REDES INALAMBRICAS 



En seguridad informática, la palabra vulnerabilidad hace referencia a una debilidad en un sistema permitiendo a un atacante violar la confidencialidad, integridad, disponibilidad, control de acceso y consistencia del sistema o de sus datos y aplicaciones.

Las vulnerabilidades son el resultado de bugs o de fallos en el diseño del sistema. Aunque, en un sentido más amplio, también pueden ser el resultado de las propias limitaciones tecnológicas, porque, en principio, no existe sistema 100% seguro. Por lo tanto existen vulnerabilidades teóricas y vulnerabilidades reales (conocidas como exploits).


El análisis de la vulnerabilidad, a veces llamado exploración de la vulnerabilidad, es el acto de determinar qué agujeros y vulnerabilidades de la seguridad pueden ser aplicables a la red de la blanco. Para hacer esto, examinamos las máquinas identificadas dentro de la red de la blanco para identificar todos los puertos abiertos y los sistemas operativos y los usos que los anfitriones están funcionando (número de versión incluyendo, nivel del remiendo, y paquete del servicio). Además, comparamos esta información con varias bases de datos de la vulnerabilidad del Internet para comprobar qué vulnerabilidades y hazañas actuales pueden ser aplicables a la red de la blanco.


 

La evaluación de vulnerabilidades es un factor clave en la seguridad de la información en una compañía. Día a día se encuentran vulnerabilidades en diferentes Sistemas Operativos, Sistemas o Aplicaciones informáticas, Programa de correo electrónico, entre otros.



Consideraciones sobre la seguridad de la red

Debe proteger los sistemas antiguos del entorno tal como lo hace con el entorno perimetral. La protección y la seguridad de la red requieren analizar las necesidades empresariales, las restricciones presupuestarias y las consideraciones sobre la seguridad que se tratarán en detalle en las siguientes secciones:


  • Defensa integral
  • Control del perímetro
  • Amenazas bidireccionales
  • Separación de servicios dispares
  • Planificación de errores y respuesta a incidentes
  • Copias de seguridad
  • Sincronización de la hora
  • Auditoría y supervisión
  • Concientización e información
Defensa integral

Para proteger los sistemas informáticos de las amenazas actuales, los administradores de TI deben evaluar la posibilidad de implementar una estrategia integral. Este tipo de estrategia se centra en eliminar factores que aumentan el riesgo e incorporar controles para reducirlo. No importa cuán buenos sean el software, el hardware, los procesos y el personal, los piratas informáticos pueden encontrar siempre una vía para traspasar un único nivel de protección.


El modelo de seguridad de defensa integral protege los activos clave mediante el uso de varios niveles de seguridad en todo el entorno para protegerse de intrusiones y amenazas de seguridad. Contar con varios niveles de seguridad en el sistema obliga al pirata informático a incrementar sus esfuerzos para penetrar en un sistema de información, lo que reduce la exposición a riesgos global y la probabilidad de estar en peligro.


En lugar de depender de una sola defensa perimetral segura o de servidores protegidos, el enfoque de defensa integral de la seguridad se basa en la incorporación de varias defensas distintas frente a una posible amenaza. La defensa integral no reduce la necesidad de otras medidas de seguridad sino que se basa en la solidez combinada de todos los componentes. 

Basar la seguridad en niveles superpuestos tiene dos ventajas clave: 

  • Dificulta el éxito de los ataques. Cuantos más niveles haya, más difícil resultará para el pirata informático efectuar una penetración con éxito y habrá más posibilidades de detectar el ataque en curso.
  • Ayuda a mitigar el efecto de las nuevas vulnerabilidades en los dispositivos. Cada nivel protege de un tipo de ataque diferente o proporciona una cobertura duplicada que no adolece de los mismos puntos débiles que el otro nivel.
  •  Como resultado, muchos de los nuevos ataques se pueden impedir si se dispone de una transacción dependiente bloqueada por una medida defensiva aún intacta, lo que proporciona tiempo para solucionar las deficiencias básicas.
EVOLUCIÓN DE LINUX 

Linux nace de la mano de un estudiante de informática de la ciudad de Helsinki en 1991,Linus Torvalds. Linus comienza a cacharrear con el sistema operativo Minix ( hecho por Richard Tanenbaum ) para conseguir explorar las posibilidades del microprocesador 386 y así comienza la andanza de Linux. Posteriormente, Linus decide reescribir su operativo desde cero, sin usar para nada Minix. 

Después de peticiones de ayuda a la comunidad de internet para resolver sus numerosas dudas y de agrias discusiones con Tanenbaum (también por las news ) en 1991 consigue sacar una versión del kernel que se puedo considerar usable. 

Esta versión fué puesta a disposición de todo el mundo, mucha gente la descargó y la probó y mucha gente consideró que podía aportar algo a este sistema operativo y se sumó al desarrollo del mismo. Linux fue mejorando paulatinamente desde ese año hasta hoy en dia que vamos ya por la versión 2.4 del kernel.





Así mismo mucha gente convirtió a Linux en su plataforma de desarrollo de software escribiendo cada vez mas y mas aplicaciones para el y dotando al operativo con programas que resolviesen todos los problemas que pueden ser atacados con un ordenador personal, esto contribuyó a elevar el parque de software disponible para Linux el cual era muy escaso en las primeras épocas del operativo.

Otra gran huella en la historia de la evolución de Linux hasta lo que es hoy en dia, es la aparición de las distribuciones. Las distribuciones son paquetes software que basicamente incluyen el kernel, aplicaciones para el kernel y métodos de instalación y mantenimiento del sistema operativo como también de las aplicaciones. 


Las primeras distribuciones que surgieron fueron Slackware y RedHat la ultima, a pesar de no ser completamente libre en todas las versiones siempre ha sido un adalid de Linux y ha incorporado en sus filas a personalidades con renombre del mundo de linux ( Alan Cox ¿? ). Posteriormente surgen otro tipo de distribuciones como Suse, Mandrake, Caldera, OpenLinux, etc... que intentan hacer nuevas contribuciones en cuanto a instalación y manejo, casi todas ella comerciales. 


Mención aparte la distribución Debian , Debian es la unica Distribución totalmente libre y en la que solo caben programas totalmente libres. Debian es mantenida por miles de voluntarios que mantienen su software y mejoran sus sistema de instalación dia tras dia para dar un resultado cada vez mas elaborado. 

Como ultima reseña sobre las distribuciones decir que también existen distribuciones integramente hechas en nuestro pais como Esware o Hispafuentes que tratan de acercar al usuario hispano un poco mas a linux.


LENGUAJES DE PROGRAMACIÓN 

Los lenguajes de programación son herramientas que nos permiten crear programas y software. Entre ellos tenemos Delphi, Visual Basic, Pascal, Java, etc..


Una computadora funciona bajo control de un programa el cual debe estar almacenado en la unidad de memoria; tales como el disco duro.

Los lenguajes de programación de una computadora en particular se conoce como código de máquinas o lenguaje de máquinas.

Estos lenguajes codificados en una computadora específica no podrán ser ejecutados en otra computadora diferente.

Para que estos programas funcionen para diferentes computadoras hay que realizar una versión para cada una de ellas, lo que implica el aumento del costo de desarrollo.


Por otra parte, los lenguajes de programación en código de máquina son verdaderamente difíciles de entender para una persona, ya que están compuestos de códigos numéricos sin sentido nemotécnico.


Los lenguajes de programación facilitan la tarea de programación, ya que disponen de formas adecuadas que permiten ser leidas y escritas por personas, a su vez resultan independientes del modelo de computador a utilizar.

Los lenguajes de programación representan en forma simbólica y en manera de un texto los códigos que podrán ser leidos por una persona. 

Los lenguajes de programación son independientes de las computadoras a utilizar.


Existen estrategias que permiten ejecutar en una computadora un programa realizado en un lenguaje de programación simbólico. Los procesadores del lenguaje son los programas que permiten el tratamiento de la información en forma de texto, representada en los lenguajes de programación simbólicos.

Hay lenguajes de programación que utilizan compilador. 


La ejecución de un programa con compilador requiere de dos etapas:

1) Traducir el programa simbólico a código máquina

2) Ejecución y procesamiento de los datos.

Otros lenguajes de programación utilizan un programa intérprete o traductor, el cual analiza directamente la descripción simbólica del programa fuente y realiza las instrucciones dadas.

El intérprete en los lenguajes de programación simula una máquina virtual, donde el lenguaje de máquina es similar al lenguaje fuente.


La ventaja del proceso interprete es que no necesita de dos fases para ejecutar el programa, sin embargo su inconveniente es que la velocidad de ejecución es más lenta ya que debe analizar e interpretar las instrucciones contenidas en el programa fuente.
PROGRAMACIÓN ESTRUCTURADA Y ORIENTADA A OBJETOS 


Programación Estructurada


La programación estructurada nació como solución a los problemas que presentaba la programación no estructurada, la cual se empleó durante mucho tiempo antes de la invención de la programación estructurada.


Un programa no estructurado es un programa procedimental: las instrucciones se ejecutan en el mismo orden en que han sido escritas. Sin embargo, este tipo de programación emplea la instrucción "goto". Una instrucción "goto" permite pasar el control a cualquier otra parte del programa. Cuando se ejecuta una instrucción "goto" la secuencia de ejecución del programa continúa a partir de la instrucción indicada por "goto". 

De esta forma, para comprender como funciona un programa es necesario simular su ejecución. Esto quiere decir que en la mayoría de los casos es muy difícil comprender la lógica de un programa de este tipo. Algunos compiladores crean referencias cruzadas a las instrucciones apuntadas por los "goto", posibilitando una navegación rápida a través del código fuente. Sin embargo, es algo común en muchos lenguajes de programación el empleo de una variable en asociación con el destino del "goto", no permitiendo la creación automática de tablas de referencias cruzadas. 

Existen problemas similares en algunos lenguajes de programación estructurada, por ejemplo cómo implementar las vistas en diferentes idiomas, de forma que varias personas puedan visualizar la misma información, pero cada una en su idioma.


Esto se opone a la idea de utilizar algún tipo de abstracción que permita comprender cómo funciona realmente un programa, que es lo que hace la programación estructurada. Lo que podíamos llamar "programación tradicional", por ejemplo la que se utilizaba (utiliza) en la confección de programas para los primitivos PCs bajo MS-DOS, o en los actuales Win-32 bajo una "ventana" DOS, es un concepto un tanto ambiguo, pero podemos intentar una definición diciendo que se basa en algunas premisas y características bastante definidas. 

Estas características pueden coexistir juntas o faltar alguna, pero en general se dan simultáneamente.

La programación estructurada es una técnica para escribir programas (programación de computadora) de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades de programación existentes en los años 1960, principalmente debido a las aplicaciones gráficas, por lo que las técnicas de programación estructurada no son suficientes. Ello ha llevado al desarrollo de nuevas técnicas, tales como la programación orientada a objetos y el desarrollo de entornos de programación que facilitan la programación de grandes aplicaciones.




Programación orientada a objetos

La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. 

Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.

  • Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad:
  • El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).
  • El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él.
  • La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. 



Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. 

El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.

La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. 


La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. 

En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.



CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS 


Sistemas Operativos de multitarea: con este sistema operativo es que la computadora procesa diferentes tareas al mismo tiempo. Existen varios tipos de multitareas. Estos sistemas Se distinguen por sus habilidades para poder soportar la ejecución de dos o más trabajos activos (que se están ejecutado) al mismo tiempo. Esto trae como resultado que la Unidad Central de Procesamiento (UCP) siempre tenga alguna tarea que ejecutar, aprovechando al máximo su utilización.

Los sistemas operativos que soportan estas multitareas son: UNIX, Windows 95, Windows 98, Windows NT, MAC-OS, OS/2.

Interfaz de Línea de Comandos:



La forma de interfaz entre el sistema operativo y el usuario en la que este escribe los comandos utilizando un lenguaje de comandos especial. Los sistemas con interfaces de líneas de comandos se consideran más difíciles de aprender y utilizar que los de las interfaces gráficas. Sin embargo, los sistemas basados en comandos son por lo general programables, lo que les otorga una flexibilidad que no tienen los sistemas basados en gráficos carentes de una interfaz de programación.


Interfaz Gráfica del Usuario:


Es el tipo de visualización que permite al usuario elegir comandos, iniciar programas y ver listas de archivos y otras opciones utilizando las representaciones visuales (iconos) y las listas de elementos del menú. Las selecciones pueden activarse bien a través del teclado o con el mouse.


Funciones de los Sistemas Operativos:



  1. Interpreta los comandos que permiten al usuario comunicarse con el ordenador.
  2. Coordina y manipula el hardware de la computadora, como la memoria, las impresoras, las unidades de disco, el teclado o el mouse.
  3. Organiza los archivos en diversos dispositivos de almacenamiento, como discos flexibles, discos duros, discos compactos o cintas magnéticas.
  4. Gestiona los errores de hardware y la pérdida de datos.
  5. Servir de base para la creación del software logrando que equipos de marcas distintas funcionen de manera análoga, salvando las diferencias existentes entre ambos.


Sistema Operativo Monotareas:


Los sistemas operativos monotareas son más primitivos y es todo lo contrario al visto anteriormente, es decir, solo pueden manejar un proceso en cada momento o que solo puede ejecutar las tareas de una en una. Por ejemplo cuando la computadora esta imprimiendo un documento, no puede iniciar otro proceso ni responder a nuevas instrucciones hasta que se termine la impresión.


Sistema Operativo Monousuario:



Los sistemas monousuarios son aquellos que nada más puede atender a un solo usuario, gracias a las limitaciones creadas por el hardware, los programas o el tipo de aplicación que se este ejecutando.

Estos tipos de sistemas son muy simples, porque todos los dispositivos de entrada, salida y control dependen de la tarea que se esta utilizando, esto quiere decir, que las instrucciones que se dan, son procesadas de inmediato; ya que existe un solo usuario. Y están orientados principalmente por los microcomputadores.


Sistema Operativo Multiusuario:




Es todo lo contrario a monousuario; y en esta categoría se encuentran todos los sistemas que cumplen simultáneamente las necesidades de dos o más usuarios, que comparten mismos recursos. Este tipo de sistemas se emplean especialmente en redes.
En otras palabras consiste en el fraccionamiento del tiempo (timesharing).


Sistemas Operativos por lotes:





Los Sistemas Operativos por lotes, procesan una gran cantidad de trabajos con poca o ninguna interacción entre los usuarios y los programas en ejecución. Se reúnen todos los trabajos comunes para realizarlos al mismo tiempo, evitando la espera de dos o más trabajos como sucede en el procesamiento en serie. Estos sistemas son de los más tradicionales y antiguos, y fueron introducidos alrededor de 1956 para aumentar la capacidad de procesamiento de los programas.

Sistemas Operativos de tiempo real:



Los Sistemas Operativos de tiempo real son aquellos en los cuales no tiene importancia el usuario, sino los procesos. Por lo general, están subutilizados sus recursos con la finalidad de prestar atención a los procesos en el momento que lo requieran. se utilizan en entornos donde son procesados un gran número de sucesos o eventos.

Sistemas Operativos de tiempo compartido:



Permiten la simulación de que el sistema y sus recursos son todos para cada usuario. El usuario hace una petición a la computadora, esta la procesa tan pronto como le es posible, y la respuesta aparecerá en la terminal del usuario.

Los principales recursos del sistema, el procesador, la memoria, dispositivos de E/S, son continuamente utilizados entre los diversos usuarios, dando a cada usuario la ilusión de que tiene el sistema dedicado para sí mismo. Esto trae como consecuencia una gran carga de trabajo al Sistema Operativo, principalmente en la administración de memoria principal y secundaria.

Sistemas Operativos distribuidos:



Permiten distribuir trabajos, tareas o procesos, entre un conjunto de procesadores. Puede ser que este conjunto de procesadores esté en un equipo o en diferentes, en este caso es trasparente para el usuario. Existen dos esquemas básicos de éstos. 

Un sistema fuertemente acoplado es a es aquel que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores. En un sistema débilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local.

Sistemas Operativos de red:



Son aquellos sistemas que mantienen a dos o más computadoras unidas através de algún medio de comunicación (físico o no), con el objetivo primordial de poder compartir los diferentes recursos y la información del sistema.

Sistemas Operativos paralelos:



En estos tipos de Sistemas Operativos se pretende que cuando existan dos o más procesos que compitan por algún recurso se puedan realizar o ejecutar al mismo tiempo.

En UNIX existe también la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, simulando paralelismo (es decir, atender de manera concurrente varios procesos de un mismo usuario). Así, en lugar de esperar a que el proceso termine de ejecutarse (como lo haría normalmente), regresa a atender al usuario inmediatamente después de haber creado el proceso.