lunes, 28 de abril de 2008

Algoritmo Para Cifrar Y Descifrar

En clases pasadas nos pusieron la siguiente tarea:

Realizar un script en Bash que haga lo siguiente:

  1. Que reciba como parametros el nombre (ruta) de un archivo, una clave y una opcion.
  2. De acuerdo a la opcion ingresada, el script cifrara o descifrara el mensaje del archivo ingresado.
  3. El algoritmos de cifrado y descifrado puede ser cualquiera (Recomendado algoritmos clasicos).
  4. La salida cifrada o descifrada ira a un archivo "output.txt" en el directorio actual.
El algoritmo de cifrado que escogi fue el de sustitucion (Sustituir un caracter por otro).

El script creado quedo asi:

#!/bin/sh
#Este programa tiene como funcion cifrar-descifrar por metodo de sustitucion (sustituye letras por numeros)
#Autor: Stiven Alexis Garcia mailto:sgarcia@misena.edu.co

var="output.txt"
if [ $# != "2" ]

then
echo "ERROR: El programa requiere de 2 parametros"
echo "Ejemplo:"
echo "./cifra.sh -c /tmp/file.txt (El tercer parametro es el nombre del archivo a cifrar/descifrar)"

echo "./cifra.sh -d /tmp/encrypted_file.txt (El tercer parametro es el archivo cifrado que queremos descifrar)"
echo "ayuda:"
echo " -c para cifrar"
echo " -d para descifrar"

exit

fi

if [ $1 = "-c" ] #Aqui le estamos diciendo que cuando el script se ejecute con el parametro "-c" cambie cada letra por un numero.
then

cp $2 output.txt

sed -i 's/a/_27_/g' output.txt # Cada vez que se utiliza el comando sed es para reemplazar un caracter por otro.
sed -i 's/b/_26_/g' output.txt
sed -i 's/c/_25_/g' output.txt

sed -i 's/d/_24_/g' output.txt
sed -i 's/e/_23_/g' output.txt

sed -i 's/f/_22_/g' output.txt
sed -i 's/g/_21_/g' output.txt

sed -i 's/h/_20_/g' output.txt
sed -i 's/i/_19_/g' output.txt
sed -i 's/j/_18_/g' output.txt

sed -i 's/k/_17_/g' output.txt
sed -i 's/l/_16_/g' output.txt

sed -i 's/m/_15_/g' output.txt

sed -i 's/n/_14_/g' output.txt

sed -i 's/o/_13_/g' output.txt
sed -i 's/p/_12_/g' output.txt
sed -i 's/q/_11_/g' output.txt
sed -i 's/r/_10_/g' output.txt

sed -i 's/s/_09_/g' output.txt

sed -i 's/t/_08_/g' output.txt

sed -i 's/u/_07_/g' output.txt
sed -i 's/v/_06_/g' output.txt
sed -i 's/w/_05_/g' output.txt
sed -i 's/x/_04_/g' output.txt
sed -i 's/y/_03_/g' output.txt

sed -i 's/z/_02_/g' output.txt
sed -i 's/A/_53_/g' output.txt

sed -i 's/B/_52_/g' output.txt
sed -i 's/C/_51_/g' output.txt

sed -i 's/D/_50_/g' output.txt

sed -i 's/E/_49_/g' output.txt

sed -i 's/F/_48_/g' output.txt

sed -i 's/G/_47_/g' output.txt

sed -i 's/H/_46_/g' output.txt

sed -i 's/I/_45_/g' output.txt
sed -i 's/J/_44_/g' output.txt

sed -i 's/K/_43_/g' output.txt

sed -i 's/L/_42_/g' output.txt

sed -i 's/M/_41_/g' output.txt

sed -i 's/N/_40_/g' output.txt
sed -i 's/O/_39_/g' output.txt

sed -i 's/P/_38_/g' output.txt
sed -i 's/Q/_37_/g' output.txt

sed -i 's/R/_36_/g' output.txt

sed -i 's/S/_35_/g' output.txt

sed -i 's/T/_34_/g' output.txt

sed -i 's/U/_33_/g' output.txt
sed -i 's/V/_32_/g' output.txt
sed -i 's/W/_31_/g' output.txt
sed -i 's/X/_30_/g' output.txt

sed -i 's/Y/_29_/g' output.txt

sed -i 's/Z/_28_/g' output.txt

sed -i 's/ /_54_/g' output.txt
elif [ $1 = "-d" ] #
Aqui le estamos diciendo que cuando el parametro sea "-d" cambie los numeros por letras.
then

sed -i 's/_27_/a/g' $2

sed -i 's/_26_/b/g' $2

sed -i 's/_25_/c/g' $2
sed -i 's/_24_/d/g' $2

sed -i 's/_23_/e/g' $2

sed -i 's/_22_/f/g' $2

sed -i 's/_21_/g/g' $2
sed -i 's/_20_/h/g' $2

sed -i 's/_19_/i/g' $2

sed -i 's/_18_/j/g' $2

sed -i 's/_17_/k/g' $2
sed -i 's/_16_/l/g' $2
sed -i 's/_15_/m/g' $2

sed -i 's/_14_/n/g' $2

sed -i 's/_13_/o/g' $2

sed -i 's/_12_/p/g' $2

sed -i 's/_11_/q/g' $2

sed -i 's/_10_/r/g' $2

sed -i 's/_09_/s/g' $2

sed -i 's/_08_/t/g' $2

sed -i 's/_07_/u/g' $2

sed -i 's/_06_/v/g' $2

sed -i 's/_05_/w/g' $2
sed -i 's/_04_/x/g' $2

sed -i 's/_03_/y/g' $2
sed -i 's/_02_/z/g' $2
sed -i 's/_53_/A/g' $2

sed -i 's/_52_/B/g' $2
sed -i 's/_51_/C/g' $2
sed -i 's/_50_/D/g' $2

sed -i 's/_49_/E/g' $2

sed -i 's/_48_/F/g' $2
sed -i 's/_47_/G/g' $2

sed -i 's/_46_/H/g' $2

sed -i 's/_45_/I/g' $2

sed -i 's/_44_/J/g' $2

sed -i 's/_43_/K/g' $2
sed -i 's/_42_/L/g' $2

sed -i 's/_41_/M/g' $2

sed -i 's/_40_/N/g' $2

sed -i 's/_39_/O/g' $2

sed -i 's/_38_/P/g' $2
sed -i 's/_37_/Q/g' $2

sed -i 's/_36_/R/g' $2

sed -i 's/_35_/S/g' $2

sed -i 's/_34_/T/g' $2
sed -i 's/_33_/U/g' $2

sed -i 's/_32_/V/g' $2

sed -i 's/_31_/W/g' $2

sed -i 's/_30_/X/g' $2

sed -i 's/_29_/Y/g' $2

sed -i 's/_28_/Z/g' $2

sed -i 's/_54_/ /g' $2

fi
echo " "

echo "OPERACION EXITOSA"

cat output.txt

echo " "

echo "Autor: Stiven Alexis Garcia "

Veamos el script en accion

Cifrado

Descifrado

Para comprender mejor este trabajo te aconsejo que leas teoria de comandos de Linux y de scripting en Bash.

lunes, 21 de abril de 2008

GnuPG: La Herramienta Libre Para Cifrado

Para comenzar a trabajar con cifrado y firmas digitales implementamos el software GnuPG el cual es la version OpenSource de PGP.
Con este software podemos cifrar tanto con Algoritmos Simetricos como con Asimetricos y firmar digitalmente.
La implementacion de este software generalmente se hace por consola de comandos cualquiera que sea el sistema operativo que utilizemos, pero existen GUI`s para trabajar en un entorno mas amigable para el usuario.
Puedes descargar GnuPG aqui.

Pagina oficial de la aplicacion:
www.gnupg.org

Firma Digital

Las firmas digitales son análogas a las firmas manuscritas. Estas últimas están basadas en la forma física en que la persona firma su nombre. Pero pueden ser fácilmente falsificadas.

Una firma digital es una precisa forma matemática de adjuntar la identidad de una persona a un mensaje. Son mucho más difíciles de falsificar que las firmas escritas, y el mensaje firmado no puede ser modificado sin invalidar la firma.

Las firmas digitales se basan en la criptografía de clave pública. Este tipo de sistemas criptográficos utiliza dos "claves". Coja un mensaje y aplíquele una de las claves en el proceso de cifrado, y al final obtendrá un mensaje distorsionado o "cifrado" (o, en el contexto actual, "firmado"). Aplíquele la otra clave al mensaje distorsionado en un proceso de descifrado y obtendrá el mensaje original.

Una de esas claves es "publica". Todo el mundo conoce esa clave --o puede obtenerla, como si fuera un número de teléfono. La otra clave es "privada". Solo tu conoces tu clave privada. Al firmar (cifrar) algo con tu clave privada, le estas poniendo tu sello personal. Nadie más puede hacerlo, ya que ellos no conocen tu clave privada.

Definicion tomada de:
www.bulma.net

Algoritmos Criptograficos

En la criptografia existen dos clases de algoritmos: SIMETRICOS y ASIMETRICOS.

Criptografia Simetrica: La criptografía simétrica es el método criptográfico que usa una misma clave para cifrar y descifrar mensajes. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez ambas tienen acceso a esta clave, el remitente cifra un mensaje usándola, lo envía al destinatario, y éste lo descifra con la misma.

Algunos ejemplos de algoritmos simetricos son: 3DES, AES, Blowfish e IDEA.


Criptografia Asimetrica: La criptografía asimétrica es el método criptográfico que usa un par de claves para el envío de mensajes. Las dos claves pertenecen a la misma persona a la que se ha enviado el mensaje. Una clave es pública y se puede entregar a cualquier persona, la otra clave es privada y el propietario debe guardarla de modo que nadie tenga acceso a ella. El remitente usa la clave pública del destinatario para cifrar el mensaje, y una vez cifrado, sólo la clave privada del destinatario podrá descifrar este mensaje.

Los sistemas de cifrado de clave pública o sistemas de cifrado asimétricos se inventaron con el fin de evitar por completo el problema del intercambio de claves de los sistemas de cifrado simétricos. Con las claves públicas no es necesario que el remitente y el destinatario se pongan de acuerdo en la clave a emplear. Todo lo que se requiere es que, antes de iniciar la comunicación secreta, el remitente consiga una copia de la clave pública del destinatario. Es más, esa misma clave pública puede ser usada por cualquiera que desee comunicarse con su propietario. Por tanto, se necesitarán sólo n pares de claves por cada n personas que deseen comunicarse entre sí.

Algunos algoritmos asimetricos son: Diffie-Hellman, RSA, DSA, ElGamal, entre otros.

Definiciones tomadas de:
www.wikipedia.org

jueves, 10 de abril de 2008

Configuracion De VPN En ISA Server

La suite de seguridad Microsoft ISA Server contiene la funcionalidad de configurar VPN's. Se podria decir que el procedimiento es facil ya que en Windows todo en en base a wizards y templates (plantillas) entonces solo debemos elegir la opcion que necesitemos y darle siguiente las veces que lo requiera y luego aceptar o finalizar y listo.
Veamos la configuracion basica de una VPN en ISA Server.

Primero que todo, entramos a la Consola de administracion de ISA Server



Desplegamos el menu Arrays, entramos al submenu Virtual Private Network (VPN) y alli damos click en la pestaña Remote Sites.



Se dieron cuenta en la imagen que ya hay varias VPN's creadas.
Ya estando alli damos click en la opcion Create VPN Site-to-Site Connection, y aparecera un Wizard o asistente de configuracion.



Agregamos el nombre de la nueva conexion VPN y damos click en Next.



En la siguiente plantilla nos pide que especifiquemos el protocolo a utilizar en esta VPN y nos da 3 opciones: IPsec. L2TP Y PPTP. Para el caso de este ejemplo escogeremos IPsec pero se puede escoger cualquiera dependiendo de las necesidades en cada caso. Luego click en Next.



En la siguiente plantilla nos pide que ingresemos el nombre del propietario de la conexion, por defecto saca nuestro servidor ISA Server. Click en Next.



En la plantilla siguiente nos pide que especifiquemos el punto final del tunel y el servidor VPN local. Ingresamos los datos requeridos y damos click en Next.




En la nueva plantilla nos pide que especifiquemos el metodo de autenticacion de IPsec y nos da 2 opciones: Usar certificados desde un CA (Certificate Authority) y la otra opcion es usar una llave compartida para la autenticacion la cual utilizaremos en este ejemplo. Ingresamos la clave y damos click en Next.



En la siguiente plantilla nos pide que ingresemos el rango de direcciones de la red remota a la cual vamos a tener acceso mediante la VPN. Por defecto saca la direccion IP del servidor VPN remoto que agregamos en una plantilla anterior, lo dejamos asi y damos click en Add Range y agregamos el rango completo de la red remota. Luego click en Next.



E n la siguiente plantilla agregamos la Site-to-Site Network Rule, o sea, la regla que se creara en ISA Server para permitir el trafico de esta VPN. Agregamos las interfaces de red y damos click en Next.




En la siguiente plantilla continuamos con la creacion de la regla pero ahora nos pide que ingresemos que tipo de trafico permitir en la conexion VPN, para caso de este ejemplo aceptaremos todo el trafico saliente(All Outbound Traffic). Click en Next.




La siguiente plantilla es la ultima y nos muestra las caracteristicas de la conexion que acabamos de crear para terminar damos click en Finish.




Listo ya creamos nuestra VPN.

En el servidor VPN remoto debemos tambier crear la conexion de la misma manera que esta utilizando la misma llave compartida, tengamos en cuenta que la aplicacion distingue entre mayusculas y minusculas entonces hay que ser muy cuidadosos al ingresar la clave compartida o nunca va a funcionar.

Las direcciones utilizadas en este ejemplo son ficticias, para crear tu propia VPN debes utilizar las direcciones reales de tus equipos.

Espero que este material sea util y sirva como base para aprender muchas mas cosas sobre VPN's e ISA Server.

miércoles, 9 de abril de 2008

Criptografia

La criptografia es el procedimiento que permite asegurar la transmisión de informaciones privadas por las redes públicas desordenándola matemáticamente (encriptándola) de manera que sea ilisible para cualquiera excepto para la persona que posea la "llave" que puede ordenar (desencriptar) la información. Los dos tipos más comunes de criptografía son los de "misma llave" y "llave pública". En la criptografía con la misma llave, un mensaje es encriptado y desencriptado utilizando la misma llave, que se manda en un envío separado. El método de llave pública es más seguro, el cual utiliza un par de llaves diferentes (una pública y una privada) que pueden tener una relación particular entre sí, de manera que un mensaje encriptado con una llave, sólo puede ser desencriptado con la otra y viceversa.

Tomado de:
http://pergaminovirtual.com.ar/definicion/Criptografia.html

martes, 8 de abril de 2008

VPN

VPN (Virtual Private Network) es una tecnologia de red que permite una extension de la red local sobre una red publica o no controlada, por ejemplo internet.
Comunmente se usan en las empresas con el fin de que los empleados tengan acceso a la red corporativa desde sus hogares o mientras viajan, mediante internet y las comunicaciones se cifran ya que viajan dentro de un "túnel virtual" lo que convierte a VPN en un metodo seguro y confiable.
Existen varios tipos de VPN:

VPN de acceso remoto
Es quizás el modelo más usado actualmente y consiste en usuarios o proveedores que se conectan con la empresa desde sitios remotos (oficinas comerciales, domicilios, hotel, aviones, etc) utilizando Internet como vínculo de acceso. Una vez autenticados tienen un nivel de acceso muy similar al que tienen en la red local de la empresa. Muchas empresas han reemplazado con esta tecnología su infraestructura «dial-up» (módems y líneas telefónicas).

VPN punto a punto
Este esquema se utiliza para conectar oficinas remotas con la sede central de la organización. El servidor VPN, que posee un vínculo permanente a Internet, acepta las conexiones vía Internet provenientes de los sitios y establece el túnel VPN. Los servidores de las sucursales se conectan a Internet utilizando los servicios de su proveedor local de Internet, típicamente mediante conexiones de banda ancha. Esto permite eliminar los costosos vínculos punto a punto tradicionales, sobre todo en las comunicaciones internacionales.

VPN interna WLAN
Este esquema es el menos difundido pero uno de los más poderosos para utilizar dentro de la empresa. Es una variante del tipo "acceso remoto" pero, en vez de utilizar Internet como medio de conexión, emplea la misma red de área local (LAN) de la empresa. Sirve para aislar zonas y servicios de la red interna. Esta capacidad lo hace muy conveniente para mejorar las prestaciones de seguridad de las redes inalámbricas (WiFi).

Un ejemplo clásico es un servidor con información sensible, como las nóminas de sueldos, ubicado detrás de un equipo VPN, el cual provee autenticación adicional más el agregado del cifrado, haciendo posible que sólo el personal de recursos humanos habilitado pueda acceder a la información.

Fuentes:
www.wikipedia.org
http://e-articles.info/t/i/1050/l/es/

miércoles, 2 de abril de 2008

Mime Types

Multipurpose Internet Mail Extensions (MIME), es un estandar de internet que especifica el tipo de informacion que viaja en los paquetes http.
En el siguiente ejemplo lo que esta en negrilla es el Mime Type de esta conexion que seria texto html.

HTTP/1.0 200 OK
Date: Thu, 24 Jul 2003 21:20:18 GMT
Server: Apache/1.3.26 (Unix) Debian GNU/Linux mod_gzip/1.3.19.1a PHP/4.2.3 v2h/1.5.1
X-Powered-By: PHP/4.2.3
Set-Cookie: lang=spanish; expires=Fri, 23-Jul-04 21:20:18 GMT
Content-Type: text/html
Age: 1

ISA Server

Continuando con el tema de seguridad perimetral ahora abordaremos ISA Server que es la suite de seguridad de Microsoft.
ISA Server contiene las funcionalidades de Iptables y Squid, es decir, se puede configurar como Firewall de filtrado de paquetes y como servidor Proxy para filtar contenido, entre otras funcionalidades que lo convierten en un software muy completo y en una buena alternativa para una empresa.
Esta es la definicion que le dan en la pagina de Microsoft:

ISA Server 2006 es un gateway integrado de seguridad perimetral que contribuye a la protección del un entorno de TI frente a amenazas procedentes de Internet, y además ofrece a los usuarios un acceso remoto rápido y seguro a sus aplicaciones y datos corporativos.

Si deseas probar ISA Server puedes descargar la version de evaluacion aqui. Hay que tener en cuenta que ISA Server es software privativo de Microsoft por lo cual su licencia tiene un costo aproximado de 4 a 8 millones de pesos colombianos.

Articulo completo:
http://www.microsoft.com/spain/isaserver/prodinfo/whatis.mspx