Google EL TIPO DE INFORMATICA: 2014

miércoles, 10 de diciembre de 2014

Comandos Basicos para VMware ESXi

En muchos casos es mucho mas rápido (y fácil) realizar algunas operaciones vía comandos que realizarlos mediante interface gráfica, otras veces hay algunas acciones que no se pueden realizar vía la interface gráfica, como por ejemplo, en el caso de VMWare no tenemos la opción apagar forzosamente una maquina virtual (o "force stop") en Vsphere Client. Por eso les dejo aquí algunos comandos para VMWare ESXi 4.1 y 5 que creo les podrían ser de utilidad, claro deben tener activado el acceso ssh en sus servidores, si aun no lo tienen pueden ver aquí como hacerlo.

  • Listar las Maquinas Virtuales
Para ver el listado de las maquinas virtuales creadas en el host ejecutamos:

vim-cmd vmsvc/getallvms

Esto nos presentara el listado de las maquinas virtuales creadas con el ID de las maquinas (vmid) que se utilizara en los siguientes comandos, el nombre de la VM, la ruta del archivo y el DataStore donde se encuentra, el tipo de Sistema Operativo (el que se indica cuando se crea la VM) y la version de la maquina virtual.

  • Ver status de una VM
Si queremos conocer si una de las maquinas virtuales que listamos con el comando anterior esta encendida o apagada, ejecutamos:

vim-cmd vmsvc/power.getstate <vmid>

Donde como ya imaginaran, remplazaremos  mid
> por el ID de la maquina virtual que queremos verificar.

  • Encender una VM
Si una de las maquinas virtuales esta apada, podemos encenderla utilizando:

vim-cmd vmsvc/power.on <vmid>

  • Apagar una VM
Si queremos apagar "amablemente" una de las maquinas virtuales, o sea, pidiéndole decentemente que por favor se apague, podemos usar el siguiente comando:

vim-cmd vmsvc/power.shutdown <vmid>

Si de la forma amable no responde, ejecutamos:

vim-cmd vmsvc/power.off <vmid>

  • Forzar Apagado de una VM
Si al intentar apagar una maquina virtual, ya sea usando el Vsphere Client o usando los comandos anteriores, la maquina no responde y no llega a apagarse, podemos forzar el apagado usando la utilidad esxcli. Primero necesitaremos el "WorlNumber" de la maquina que queremos apagar, ejecutaremos:

Para ESXi 5:
esxcli vm process list

Para ESXi 4.1:
esxcli vms vm process list


Esto nos arrojara un listado con las VMs que tenemos actualmente y también veremos el "Worl ID" de cada una. Cuando hayamos identificado el que corresponde al equipo que queremos forzar a apagar ejecutamos entonces:

Para ESXi 5:

esxcli vm process kill --type=force --world-id=<WorldNumber>

Para ESXi 4:

esxcli vms vm process kill --type=force --word-id=<WorldNumber>


  • Informacion del Hardware del Host
Para ver la información de hardware del host donde tenemos instalado VMWare ESXi, como la cantidad de procesadores y tipo, la cantidad de memoria RAM que soporta, la cantidad de slots que de memoria que tiene el Motherboard, el tamaño de cada DIMM de memoria, entre otros, podemos usar el siguiente comando:

smbiosDump

Este comando nos traerá una extensa lista de todos los componentes del equipo, esto es muy util si, por ejemplo, están planeando un upgrade de memoria para su servidor y quieren saber cuando les soporta, cuantos DIMMs tiene instalados y cuantos slots tienen disponible, etc.

Información Capacidad Memoria RAM  Soportada
Como ven esto nos muestra información del tipo de memoria que tenemos en el equipo y la cantidad que soportaría. Bueno como siempre espero que esto les sea de utilidad, hasta el próximo!

miércoles, 17 de septiembre de 2014

Permitir conexiones FTP a puertos Alternos a traves de IPTables

Hace un tiempo les hablaba en este post sobre como configurar IPTables para permitir conexiones a un servidor FTP que se encuentre en la red y les hablaba sobre los modos "Pasivo" y "Activo" de FTP. Les decía que era necesario activar los modulos ip_conntrack_ftp y ip_nat_ftp (usando modprobe), pero que pasa si el servidor FTP lo tenemos configurado para escuchar en un puerto diferente al 21? En ese caso, no basta solo con modificar las reglas DNAT en IPTables, también hay que indicarle a los módulos que cargamos que estaremos utilizando puertos diferentes al standart.

Para indicar esto, solo tenemos que crear un archivo llamado conntrack.conf dentro de /etc/modprobe.d, dentro de este indicaremos el puerto en el que escucha nuestro FTP. Supongamos que configuramos el servidor FTP para que escuche en el puerto 2221, en contenido del archivo conntrack.conf seria:

options ip_conntrack_ftp ports=2221

Guardamos nuestro archivo y listo. Con esto y las reglas de IPTables configuradas, ya podremos redirigir el trafico hacia nuestro servidor FTP. En caso de que necesiten saber como configurar las reglas pueden revisar este post y claro, cambiar el puerto "21" por el puerto en que escucha su servidor. Bueno, este fue corto, como siempre espero les haya sido de utilidad.

miércoles, 30 de julio de 2014

Exportar/Importar Permisos NTFS de Carpetas y Subcarpetas usando ICACLS

Aquí les tengo un corto post sobre algo que (como prácticamente todo lo que les escribo aqui) tuve que utilizar recientemente. Supongan que tienen una carpeta que contiene otras subcarpetas y archivos, cada subcarpeta tiene permisos específicos al igual que los archivos, y con el tiempo se han ido agregando otros usuarios a esta carpeta con diferentes privilegios, y que un día, este folder se borra (o lo borran) o lo tienes que copiar a (o restaurar desde) una unidad, por ejemplo FAT32 donde se perderán todos los permisos que se habían configurado. Normalmente esto no seria mucho problema, pero si la carpeta es usada por muchos usuarios y contiene muchos subfolders dentro, es posible que pases mucho tiempo determinando que usuario tenia acceso a cual folder, si tenia permiso de lectura o de escritura, si podía escribir pero no podía borrar, en fin determinar nuevamente todos los permisos NTFS y configurarlos para cada subfolder. Para estos casos podríamos exportar los permisos de la carpeta principal y de todas las subcarpetas y su contenido que contengan a un archivo .txt, el cual podremos luego importarlo nuevamente, ambas cosas usando el comando icacls de Windows.

El comando Icacls nos permite visualizar y modificar los permisos (o DACLs - discretionary access control lists- ) de un archivo o carpeta. El formato o notación en que están definidos estos permisos es SDDL (Security Descriptor Definition Lenguage), esta notación se vería mas o menos de esta forma ejecutando icacls a la carpeta "Program Files" y al archivo "C:\Windows\System32\cmd.exe":

Salida comando icacls.exe

Como ven el comando nos muestra los grupos o usuarios que tienen permisos definidos y el nivel de acceso que tienen sobre la carpeta o archivo, por ejemplo (F) para Full Permitions, solo lectura se expresaría como (R), lectura y ejecución como (RX), escritura como (W). También muestra si los permisos son heredados de folders superiores. Para mas detalles sobre esta notación pueden visitar este link.

Y bien, volviendo a lo que les mencione arriba, si quisiéramos exportar los permisos de una carpeta y sus subcarpetas, utilizaríamos:

C:\> icacls D:\MiFolderdeDatos /save permisosfolder.txt /t

Donde "D:\MiFolderdeDatos" es la carpeta de la cual quiero exportar los permisos, "/save" es la opción para indicarle a icalcs que queremos guardar estos permisos en el archivo "permisosfolder.txt", y con la opción "/t" le indicamos que queremos también los permisos de los subfolders de nuestra carpeta.

Ahora, una vez ya tenemos nuevamente nuestra carpeta con todos los datos restaurada (y claro, en una unidad NTFS), podemos importar todos los permisos, usando ahora:

C:\> icacls D:\ /restore permisosfolder.txt

Como habrán notado, ahora para restaurar los permisos no necesito incluir la carpeta, solo indico la ruta raiz, el sea el disco donde se encuentra el folder (D:\). Esto porque icacls al momento de exportar los permisos utiliza ruta relativa, o sea, por cada entrada de permisos solo escribiría, por ejemplo "MiFolderdeDatos\archivo1.doc" ; "MiFolderdeDatos\carpeta1", así que no necesitamos especificar la carpeta a restaurar. Y bien, como les dije era un post bien corto, espero que esto les sea de ayuda en algún momento, como lo fue para mi.

Hasta el Próximo!

lunes, 26 de mayo de 2014

Importar Datos en Active Directory desde un archivo de Texto con DSQUERY y DSMOD

Quizas les haya pasado esto, necesitan modificar la información o propiedades en Active Directory de multiples usuarios, por ejemplo, agregar la dirección de correo, números telefónicos, agregarlos a un grupo o cualquier otra información del usuario. Esto mismo se me presento hoy, tenia que agregar el código de empleado a todos los usuarios, se le iba a agregar en el campo "Description". Me dieron un archivo de Excel con la lista de usuarios y la información que debía agregar. Afortunadamente había una columna con el username del dominio, por lo que era mas fácil asociar la nueva información con active directory.

DSQUERY y DSMOD

Bien, la manera mas fácil que pensé para hacer esto fue utilizar los comandos "DSQUERY" y "DSMOD", estos comandos permiten como seguramente ya han intuido, hacer búsquedas de en Active Directoty (dsquery), ya sea usuarios, computadoras, etc., para y modificar parámetros (dsmod) como los que les mencione mas arriba (correo, nombre usuario, password, etc.). Para utilizarlos tendrian que instalar "Remote Server Administration Tools". Si queremos por ejemplo  listar todos los usuarios del dominio usaríamos "dsquery user", podemos también buscar todos los usuarios de un OU especifico, supongamos que queremos los usuarios del OU "Contabilidad" y que nuestro dominio Active Directory se llama "midominio.local", usaríamos esto:

C:\>dsquery user ou="Contabilidad,dc=midominio,dc=local"

Con esto tendríamos el listado de usuarios de este OU, lo bueno es que ahora podemos tomar la salida de este comando y pasárselo a DSMOD para cambiar los parámetros o atributos que necesitemos agregar o cambiar. Siguiendo el ejemplo anterior, supongamos que a los usuarios de ese OU queremos modificarles el atributo "Office", lo que hariamos es repeterir el mismo comando anterior, pero agregar un "pipe" al final para dirigir la salida del comando a DSMOD y agregar dsmod user -office "Oficina Principal":

C:\>dsquery user ou=Contabilidad,dc=midominio,dc=local" | dsmod user -office OficinaPrincipal


Así todos los usuarios del OU que indicamos tendrán el atributo modificado, pero ahora viene lo interesante. Volvamos al caso inicial de modificar un grupo de usuarios y agregar o modificar en cada uno un atributo, pero con valores diferentes. Como les dije tenia la lista de usuarios y los atributos que debía agregar, lo que hice fue tomar de este archivo las 3 columnas que me interesaban: username (el del dominio), correo electrónico y código. Lo que haremos sera utilizar este archivo de texto (cvs) con estas 3 columnas y alimentar con cada una de ellas estos comandos. Usaremos también el comando "FOR"  que sera quien leerá el archivo de texto y pasara la información a dsquery y dsmod. El archivo de texto se vería mas o menos de esta manera:

Archivo de Usuarios en formato CVS

Donde como pueden ver tenemos en la primera columna el usuario, en la segunda su cuenta de correo y en la tercera el código del usuario que agregaremos en el campo "Description" de Active Directory. Como ven las columnas están separadas por coma (cvs), lo guardaremos en "C:\usuarios.cvs". Teniendo ya nuestro archivo listo y organizado, podemos hacer una prueba con el comando FOR ejecutando "for /F "tokens=1,2,3 delims=, " %a in (usuarios.csv) do echo %a %b %b" obtendríamos:


Si la salida fue como el gráfico anterior, podemos ahora hacer unos cambios al comando, y quedaría de esta manera:

C:\>for /F "tokens=1,2,3 delims=, " %a in (C:\usuarios.cvs) do dsquery user -samid %a | dsmod user -email %b -desc %c

Vamos a ver entonces lo que pasa aqui. Si tienen nociones de programación estarán familiarizados con el comando FOR, lo que estamos haciendo es "iterando" sobre el archivo "usuarios.cvs" y por cada linea ejecutaremos una acción. El comando "For" lo que hará es asignar el contenido de cada columna en una linea a una variable, en este caso la primera columna de la primera fila (el nombre de usuario) se asignara a la variable "%a", la segunda (el correo) a la variable "%b" y la tercera (el código) a la variable "%c" (pero como ven solo especifique %a en el comando, ya el sabe que las otras columnas las almacenara en variables nombradas con la letra siguiente). Luego indicamos el parámetro "do" del comando for, que es entonces donde especificamos la acción que se ejecutara en cada iteración sobre el archivo, y es aqui entonces donde usamos los comandos "dsquery" y dsmod". Como ven, ejecuto "dsquery user -samid" y le paso como parametro la variable %a a la que FOR ya le ha asignado el valor de "user1" (con "-samid" le indicamos a dsquery que buscaremos en Active Directory por username). Luego hago un "pipe" (|) para redirigir el resultado de dsquery a dsmod, usando "dsmod user -email %b -desc %c". Aqui estamos modificando 2 atributos del usuario al mismo tiempo (email y descripcion) y los valores que le estamos pasando son las variables %b y %c, que FOR ya le asigno los valores "user1@midominio.local" y "00001" respectivamente.

Al presionar enter veremos que se irán ejecutando estos comando uno por uno por cada linea del archivo usuarios.cvs, si encuentra un error en una linea del archivo el error les saldrá en pantalla pero no se detendrá la ejecución, ya que FOR continuara ejecutandose por cada linea del archivo. Bien, con esto hemos importado datos o actualizado información de un grupo de usuarios en Active Directory usando un archivo de texto, espero haberles explicado bien, todo esto tiene mucho sentido en mi cabeza pero a veces la explicación no me sale tan clara :D. Les recomiendo explorar los comando "DSQUERY" y "DSMOD" usándolos con el parámetro  de ayuda "/?", verán todo lo que pueden hacer en Active Directory desde la linea de comandos con ellos y tambien con DSGET y DSMOD. Espero que les haya sido de utilidad!


sábado, 26 de abril de 2014

Creando Symbolic Links en Windows con MKLink

En esta semana se presento un pequeño problema en la oficina. Uno de los programas usado por los usuarios llamaba al Internet Explorer para generar un reporte desde Reporting Services, pero por alguna razón se abría la versión de 64bits del navegador. Esto generalmente no seria problema, si no fuera porque algunos ActiveX solo funcionan en la version de 32bits. Después de probar varias cosas decidí, para no perder mucho tiempo, renombrar la capeta donde se encuentra la versión de 64bits de Internet Explorer ( de "Internet Explorer" a "Internet Explorer64" ) y crear un Symbolic Link en la misma ruta y con el nombre original de la carpeta apuntando a la versión de 32bits que se encuentra en "C:\Program Files (x86)\Internet Explorer", y de esto es que quiero hablarles hoy; de los Symbolics Links en Windows, como crearlos y cuando usarlos.

Un Symbolic Link (o softlink) es algo así como un Shortcut, simplemente es una dirección hacia otro archivo o carpeta, con la diferencia de que el shortcut que creamos en Windows es realmente un archivo de extension ".lnk", mientras que el Symbolic Link es una redireccion hecha a nivel del File System. Esto significa que, por ejemplo, si creamos un shortcut que apunte a la carpeta "C:\Users" lo que crearemos sera un archivo ".lnk" que dentro apunta a la carpeta que indicamos, una aplicación tendría que saber interpretar este tipo de archivos .lnk y generalmente no lo hacen. Windows Explorer si los reconoce y por eso podemos hacer doble clic sin problemas. En el caso de los Symbolic Link, la redireccion la crea el propio File System (NTLM) y les muestra esto a las aplicaciones como carpetas o archivos reales. Estos links podemos también crearlos entre diferentes discos, por ejemplo, podríamos hacer un Symbolic Link en "C:\Datos" que apunte realmente a "E:\Programa\Datos", y todas las aplicaciones verían este link como una ubicación real en el equipo y no como un shortcut. Lo que nos serviría por ejemplo para mover una carpeta de datos de un programa sin tener que hacer alguna configuración en este y que el piense que sigue escribiendo en su carpeta original.

Para crear estos links, usamos en el comando mklink. Lo ejecutamos de la siguiente manera:


mklink /D ruta-donde-se-creara-el-link ruta-donde-apuntara-el-link 

Como ven es muy sencillo de usar, "/D" es la opción que le indica que se creara un Symbolic Link, luego le indicamos donde queremos crear el link seguido de a donde apuntara el link. Este comando requiere elevación de privilegios, así que tendrán que abrir una ventana de comandos (CMD) como Administrador. Para el caso que les mencione arriba, ejecute el comando de la siguiente manera:


Como ven renombre la carpeta de Internet Explorer a "Internet Explorer64" y dentro de esta misma ruta cree un Symbolic Link llamado "Internet Explorer" apuntando a la ubicación de la versión de 32bits. Si hacemos un "dir" aquí veremos ahora que la carpeta "Internet Explorer" es un SYMLINKD:


Y como ven, se nos muestra hacia donde apunta. Bueno, hasta aquí este post, espero como siempre que les sea de utilidad.

lunes, 24 de marzo de 2014

Crear un Access Point (Rogue AP) en Mac OS X y Captura de Datos con SSLStrip

En esta entrada veremos como crear un punto de acceso a Internet falso (o Rogue AP) en Mac OS Mavericks, usando la herramienta nativa de este sistema operativo para compartir Internet para crear una red Inalámbrica, configuraremos el Firewall del sistema para redireccionar todo el trafico que salga a traves de esta conexión a un puerto especifico en el equipo donde tendremos entonces la herramienta SSLStrip capturando el trafico. La función principal de SSLStrip no es solo la captura del trafico, sino mas bien permitir capturar datos en forma plana que generalmente se enviarían encriptados con SSL. Esto lo hace de la siguiente manera, cuando en una pagina, por ejemplo Facebook, hacemos clic en "Login" o "Acceder", se gestiona una sesión segura usando SSL (HTTPS) antes de enviar los datos digitados, lo que hace SSLStrip es que captura esa solicitud y evita que se establezca la sesión SSL, por lo que la conexión se mantiene en texto plano. Claro esto no siempre funciona, algunos sitios no permiten hacer el login si la conexión no es segura. La idea es mostrar porque debemos tener cuidado al conectarnos a una red Wireless abierta que encontremos, bien, habiendo dicho esto podemos empezar.

Creando la Red Wireless

Lo primero que haremos sera crear la red inalámbrica a la que queremos que las personas se conecten. Para esto compartiremos una conexión a Internet, esta conexión puede ser, por ejemplo, via un cable de red, o como en mi caso, puede ser a traves de un telefono celular via USB. Para esto iremos a System Preference --> Sharing. Veremos la siguiente ventana:

Comparitr Conexion Internet

Antes de activar la opción "Internet Sharing" de la sección de la izquierda debemos indicar cual sera la conexión que compartiremos y a traves de que medio la compartiremos. En nuestro caso, yo estoy compartiendo la conexión a Internet del Iphone a traves del cable USB, y la compartire a traves de la tarjeta Wi-Fi. Luego haremos clic en el boton "Wi-Fi Options..." para configurar el nombre de la red inalámbrica que crearemos y el password, como lo que queremos es hacer una red llamativa para que las personas se conecten, elegiremos como nombre "OPEN_INTERNET" o "OPEN_WIFI" y la configuraremos sin password, como se muestra en la próxima ventana:


Hacemos clic en OK y volveremos a la ventana anterior, donde seleccionaremos el recuadro "Internet Sharing" para habilitar esta conexión, con esto ya estaremos compartiendo nuestra conexión a Internet y regalando Internet al publico. Necesitamos ahora ver la interface que se creo para esta conexión Wireless y ver la dirección IP que tiene esta y que asignara a los usuarios, para esto ejecutamos en el comando "ifconfig" en una ventana Terminal, veremos algo como esto:



Como pueden ver, tengo ahora una interface llamada "bridge100", con la dirección IP 192.168.2.1, las computadoras que se conecten a esta red inalámbrica se le asignaran IP's en este mismo rango. Esta información la usaremos mas adelante cuando estemos configurando el Firewall.

UPDATE:

Si al habilitar "Internet Sharing" no les funciona (no ven que el icono del Wireless cambia en la barra), es posible que esten utilizando Mavericks o Yosemite. En mi caso, cuando migre a estas versiones dejo de funcionarme el Internet Sharing, pero se corrigio con "El Capitan" (10.11.1).

Configuración Firewall Mac OS

Bien, en este punto ya debemos tener personas conectadas a nuestra red, ahora necesitaremos redirigir todo el trafico HTTP o HTTPS que salga por esta conexión hacia el puerto en que estará escuchando SSLStrip. Para esto configuraremos algunas reglas en el Firewall de Mac OS, que a partir de Lion se maneja con el con pf, este manejador de paquetes viene de FreeBSD. La configuración de pf se encuentra en /etc/pf.conf,  pero las reglas del Firewall no se encuentran directamente en este archivo,  sino que que indican aqui los archivos que contienen las reglas. A estos archivos se les llama "Anclas" (anchor en ingles). Así que lo que haremos sera crear nuestro propio archivo ancla donde definiremos las reglas necesarias, y luego haremos referencia a ellos en pf.conf. Estos archivos "ancla" se crean generalmente en "/etc/pf.anchors/", el archivo que crearemos lo llamaremos "rdr.proxy" y lo crearemos ejecutando "sudo vim /etc/pf.anchors/rdr.proxy", el contenido de este archivo sera el siguiente:


rdr pass on bridge100 inet proto tcp from any to any port 80 -> 192.168.2.1 port 8080
rdr pass on bridge100 inet proto tcp from any to any port 443 -> 192.168.2.1 port 8080

pass in log quick on bridge100 proto { tcp, udp } from any to 192.168.2.1 port 8080 keep state
pass in log quick on bridge100 proto { udp } from any to 192.168.2.1 port 53 keep state
pass in log quick on bridge100 proto { icmp } from any to any keep state
pass out inet proto tcp from any to any keep state
pass out inet proto udp from any to any keep state

Con las primeras 2 reglas configuramos el "Redirect" del trafico hacia el puerto 8080, como ven indicamos a cual interface se aplicaran estas reglas que en este caso es a la interface que se creo cuando activamos el "Internet Sharing", que como vimos fue la interface "bridge100".  Las siguientes reglas lo que permiten es el acceso o abrir el acceso al puerto 8080 donde esperara SSLStrip por el trafico de las personas que usen esta red, tambien permitimos el acceso al puerto UDP 53 para que los equipos puedan hacer consultas DNS. Luego que hayamos copiado estas lineas en el archivo podemos guardarlo e irnos al archivo /etc/pf.conf, donde agregaremos las siguientes lineas:

rdr-anchor "rdr.proxy"
load anchor "rdr.proxy" from "/etc/pf.anchors/rdr.proxy"

Como ven primero definimos el archivo con la linea "rdr-anchor..." y luego le indicamos cargue este archivo y le indicamos la ubicación donde se encuentra. Al hacer estas modificaciones, el archivo /etc/pf.conf se veria de esta manera:


Archivo pf.conf

El Firewall del Mac OS  (pf) viene desactivado por defecto, así que aun no estarán habilitadas las reglas que acabamos de agregar, para esto tendremos que ejecutar el siguiente comando:

#sudo pfctl -ef /etc/pf.conf

Cuando ejecutemos este comando, habremos cargado las reglas y activado pf en el sistema. Hay que tener en cuenta que al habilitar esto, todo el trafico de las personas que esten conectadas a la red inalámbrica que acabamos de crear se estará redireccionando al puerto 8080, y como aun no tenemos SSLStrip corriendo en el sistema no podrán navegar. Así que seria mejor ejecutarlo cuando ya este instalado y corriendo SSLStrip, así que pasemos al siguiente paso.

Instalando SSLStrip 

Ya entramos en la ultima parte, ahora solo nos resta instalar SSLStrip para hacer la captura de los datos. Lo pueden descargar desde este link. Esta herramienta esta desarrollada en Python, pero para ejecutarla en Mac OS sera necesario instalar algunos componentes. Esto podemos instalarlo usando MacPorts, que es un manejador de paquetes similar a APT-GET en Linux. Si no lo tienen pueden descargarlo desde este link y seguir las instrucciones (su instalación es sencilla). Una vez lo tengan instalado solo debemos ejecutar:

$ sudo port install py-twisted-web2
$ sudo port install py-openssl

SSLStrip requiere Python 2.5 o superior, si tienen varias versiones de Python en el sistema, es posible que necesiten ejecutar los comandos anteriores indicando la version al lado de "py", por ejemplo "sudo port install py25-twisted-web", una vez instalados estos componentes, nos movemos a la carpeta donde descargamos SSLStrip y entonces ejecutamos:

$ sudo python sslstrip.py -l 8080 -w captura.log

Con esto iniciamos sslstrip escuchando en el puerto 8080 (con la opción -l) y le indicamos que todo lo que capture lo guarde a un archivo llamado "captura.log". Cuando ejecutemos este archivo sslstrip se mantendrá corriendo y capturando hasta que lo cancelemos, se vera como se muestra a continuación:

Ejecutando SSLStrip.py

Ahora solo tenemos que esperar que las personas que esten cerca se conecten a nuestro AP y SSLStrip empezara a capturar sus logins y passwords. Como los datos se van copiando al archivo "captura.lo", podemos abrir otra ventana de Terminal y ejecutar "tail -f captura.log" para ir viendo los datos según van siendo capturados. Entonces, cuando una persona se conecte, por ejemplo a Facebook, veremos los datos que introduce aparecer en el archivo captura.log como se muestra a continuación:



Como ven, el incauto conectado a mi red intento conectarse a facebook, y como vemos SSLStrip nos trajo el username que utilizo (usuario-conectado) y el password (misuperpassword01). A parte de SSLStrip se puede utilizar un proxy, como Burp Proxy (del cual les hable en este post) y así se podría incluso tener mas control sobre el trafico de las personas que se conecten. Bueno, hasta aqui este post, espero que les sea de utilidad y lo piensen mejor la próxima vez que vayan a conectarse a una red inalámbrica publica o que no sea de confianza (... y aunque sea de confianza).

jueves, 6 de marzo de 2014

IPSec Site-to-Site VPN entre WatchGuard XTM y Linux OpenSwan

Supongamos que tenemos que conectar 2 oficinas a traves una conexión VPN, en una de las oficinas tenemos un equipo WatchGuard XTM como Gateway y en la otra tenemos un equipo Linux con OpenSwan (que es una implementación de IPSec para Linux). Podemos hacer la conexión VPN entre estos 2 equipos (y la red detras de ellos) usando IPSec, solo tenemos que asegurarnos de configurar correctamente los parámetros de  IPsec para cada fase, de manera que en la negociación de los algoritmos criptograficos a utilizar ambos equipos puedan elegir protocolos compatibles. Hay que tener en cuenta que basicamente la conexión IPSec en modo tunel (que es el modo a utilizar cuando queremos crear un VPN) se realizara en 2 fases: en la primera fase (llamada "Main Mode") los 2 puntos se autenticaran uno a otro mediante una clave compartida  o certificados y negociaran los algoritmos de encriptacion a utilizar durante el intercambio de esta clave, y en la segunda fase se negociara la politica IPSec que utilizaran, por ejemplo, el tipo de trafico y las direcciones o segmentos de red en ambos lados que utilizaran el tunel. Esta es una explicación bastante resumida de todo lo que hace IPSec (a mi entender), si quieren entender mejor todo lo que hace IPSec les recomiendo visitar este link.

Para la autenticación entre los puntos de nuestro VPN utilizaremos una clave compartida o "Shared Key", e identificaremos cada punto por la IP externa de cada uno. Vamos a llamar al punto donde esta el WatchGuard XTM el punto A, y su IP sera la 6.6.6.6, la red que estará detrás de este equipo sera la 192.168.1.0/24. El punto donde esta el equipo Linux con OpenSwan sera el punto B y su IP sera 7.7.7.7, la red detras de este sera 192.168.2.0/24. La clave compartida que utilizaremos para autenticarlos sera "MiClaveVpn". Así que el escenario se veria mas o menos de esta forma:

Dagrama Conexion VPN


Como ven, incluyo en el diagrama los routers instalados por el suplidor de Internet en ambos lados, mas adelante veran porque. Ya que tenemos claro el escenario, vamos a empezar la configuración desde el equipo WatchGuard, así que abriremos el "Policy Manager", en el menu superior hacemos clic en "VPN" y seleccionamos "Brach Office Gateways...":

WatchGuard VPN

En la ventana de "Gateways" que abrira, haremos clic en "Add" y nos abrira la siguiente ventana. En esta pondremos el nombre para esta conexión, para este ejemplo le puse "VPN01", insertaremos tambien aqui la clave compartida que definimos para esta conexión (MiClaveVPN). Luego haremos clic en el boton "Add" mostrado mas abajo:


En esta próxima ventana (mostrada en el siguiente grafico) insertaremos la información sobre los dos gateways, como la IP del punto remoto (OpenSwan) y la interface del WachGuard que utilizaremos para esta conexión. En la primera sección de esta ventana (Local Gateway) definiremos el ID de este punto para el tunel, que sera el nombre con el que se identificara el WatchGuard con el punto remoto. Seleccionamos la opción "By Domain Information" y hacemos clic en el boton "Configure" que se encuentra justo al lado, esto nos abrira una nueva ventana donde seleccionaremos "Domain Name", escribiremos al lado la IP con la cual llegaremos al otro punto (para el caso de este ejemplo seria "6.6.6.6") y hacemos clic en OK. Volveremos la ventana anterior donde seleccionaremos la interface externa del WatchGuard correspondiente a la IP con la cual haremos la conexión VPN (en el caso de este ejemplo, la interface externa utilizada se llama "Internet"). En la sección de mas abajo (Remote Gateway) indicaremos la IP del punto remoto, seleccionaremos "Static IP Address" e insertaremos la IP del punto remoto (para este caso 7.7.7.7). Luego al igual que en "Local Gateway" y seleccionaremos la opción "By Domain Information" y haremos clic en "Configure" para escribir en "Domain Name" la IP remota (7.7.7.7), este sera el nombre con el que WatchGuard esperara que se identifique el equipo Linux. Al final la ventana se veria de esta manera:

Configuracion Gateways WatchGuard

Hacemos clic en "Ok" y volveremos a la ventana inicial donde escribimos la clave compartida. En esta ventana haremos clic en el Tab "Phase 1 Settings". Desactivaremos la opción "Dead Peer Detection", se vera entonces de esta manera:

Configuracion VPN Gateways WatchGuard

Hacemos clic en "OK" y con esto hemos configurado los Gateways para esta conexión, ahora definiremos el "Tunel" que usara estos Gateways, donde indicaremos las redes detrás de cada Gateway y la dirección del trafico, o sea, si el trafico sera en una sola dirección o en ambas. Para este caso, y quizas para la mayoría, sera en ambas direcciones (bidireccional).  Hacemos clic nuevamente en "VPN" del "Policy Manager", seleccionamos "Brach Office Tunnel..." y luego hacemos clic en "Add". Debemos ponerle un nombre a esta Tunel un nombre, podemos nombrarlo "TUNEL-01", debajo seleccionaremos el Gateway que utilizaremos, que es el que creamos anteriormente "VPN01". Luego hacemos clic en el boton "Add" para indicar cuales seran las redes que transitaran por el tunel. En la local agregaremos "192.168.1.0/24" y en la remota "192.168.2.0/24", nos aseguramos que en la sección "Direction" este indicado "<==>", que indica que el trafico sera bireccional, y luego hacemos clic en OK. Luego hacemos clic en el tab "Phase 2 Settings", en la sección "IPSec Proposals" veremos agregado "ESP-AES-SHA1" por defecto. Agregaremos a esta lista dos mas haciendo clic en "Add", estas seran "ESP-3DES-SHA1" y "ESP-DES-SHA1". Hacemos clic en "OK" y ya tenemos configurado el Tunel para nuestra conexión, al final la ventana del tunel que creamos se veria de esta manera:


Ahora podemos guardar y aplicar la configuración en el WatchGuard y pasar entonces al equipo Linux con Openswan. Primero vamos a asegurarnos que IPTables este configurado adecuadamente, si necesitan un repaso de IPTables les recomiendo que visiten este post. Debemos tener una regla INPUT para la interface externa que permita el trafico UDP a los puertos 4500 y 500 desde la IP 6.6.6.6 (damos por sentado que ya tiene OpenSwan instalado). Si usan una regla "MASQUERADE" asignar la IP externa del equipo al trafico saliente a Internet, o si usan "SNAT", tendrán que hacer una excepcion para que el trafico que se dirija a la red remota con la cual nos conectaremos via VPN no vaya a ser afectada por el NAT configurado por estas reglas, la regla seria de esta manera:

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d ! 192.168.1.0/24 -j SNAT --to-source 7.7.7.7

Con esto le decimos a IPTables que enmascare cualquier trafico saliente de la red con excepción del trafico que vaya dirigido a la red remota. Basicamente esto es lo necesario en IPTables, vamos ahora a la configuración de OpenSwan. El archivo de configuración se encuentra en /etc/ipsec.conf, aqui configuraremos los parámetros de IPSec, como los puntos del VPN, las redes a enlazar, etc. el contenido de este archivo para este ejemplo seria el siguiente:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# basic configuration
config setup
        # NAT-TRAVERSAL support, see README.NAT-Traversal
        nat_traversal=yes
        protostack=netkey
        nhelpers=0
        uniqueids=yes

# Add connections here
conn $default
        keyingtries=3

conn vpn-watchguard
        authby=secret
        left=6.6.6.6
        leftsubnet=192.168.1.0/24 
        leftnexthop=6.6.6.5
        leftid=@6.6.6.6
        right=7.7.7.7
        rightid=@7.7.7.7
        rightnexthop=%defaultroute
        rightsubnet=192.168.2.0/24
        type=tunnel
        auto=start
        pfs=no

#Disable Opportunistic Encryption
include /etc/ipsec.d/examples/no_oe.conf

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------          

Todo lo que es "left" se refiere al otro lado de la conexión VPN. La sección "leftnexthop" que señalo en negrita de la configuración anterior, indica el proximo salto antes de llegar al equipo al equipo que manejara el VPN del otro lado del tunel (en este caso el WatchGuard), generalmente habra un router delante que es quien le da la conexión a Internet, como se muestra en el diagrama de mas arriba. El resto de esta configuración es bien descriptiva así que podemos continuar. El siguiente paso sera configurar el "Share Key" o clave compartida para esta conexión VPN, para esto editaremos el archivo "/etc/ipsec.conf" y agregaremos la siguiente linea:


@7.7.7.7 @6.6.6.6 : PSK "MiClaveVPN"

Con esto ya tenemos nuestro OpenSwan configurado para la conexión (mucho mas rapido verda?). Antes de iniciar el tunel, vamos a verificar que esto este bien con Openswan, ejecutaremos el comando "ipsec auto verify" y si todo esta bien deberia devolvernos algo como esto:

Salida del comando ipsec verify

Ahora para iniciar nuestro tunel podemos ejecutar desde este equipo el siguiente comando:


#ipsec auto --start vpn-watchguard 

Ya debe estar arriba nuestro VPN entre WatchGuard y OpenSwan, podemos verificarlo ejecutando "ipsec auto --status", aparecerán varias lineas, pero las que buscaremos serán las siguientes:


Y con esto ya tenemos nuestras redes conectadas via VPN a traves de dos equipos diferentes usando el standard IPSec. En caso de que les de algún error les recomiendo hacer el debugging desde Linux, pueden buscar en el archivo /var/log/auth.log ya que en este archivo Openswan va registrando cada actividad y es mas facil seguir cualquier error. 

lunes, 24 de febrero de 2014

Password por Defecto en Modems ADSL Huawei ADSL HG532e

En estos dias estaba en una oficina configurando el acceso a Internet y una nueva linea ADSL que se habia contratado. Necesitaba hacer algunos cambios a la configuración del Router y tenia que acceder al Manager para hacerlos. Como les habia comentado anteriormente, mucho de estos Routers/Modems ADSL venian con un usuario/password por defecto, desde un tiempo hacia aca lo que estan haciendo es que usan el serial del equipo, la MAC Address o la contraseña WEP/WAP del Wireless como clave para acceder a la administración. El Modem que instalo el suplidor fue un Huawei HG532e, procedi a conectarme al menu para hacer los cambios necesarios, generalmente la IP por defecto de estos equipos 10.0.0.1:

Ventana de Login Router Huawei

Para el caso de este Modem, el usuario/password es el mac address, lo que en cierta forma es una ventaja sobre el metodo antiguo de usar "admin/admin", ya que por lo menos para poder acceder al menu es necesario tener acceso fisico al equipo y evita que cualquiera a traves de Internet pueda entrar a nuestro Router. Asi que inserte el Mac Address y pude entrar sin problemas. Una vez habia hecho los cambios que necesitaba, me pase por la seccion "Mantenimiento" del menu para ver que opciones me presentaba y me llamo la atencion que en la parte de "cuentas de usuario" habia un "Drop-down" menu, o sea, que aparentemente habia mas de una cuenta creada en el router, aunque lo habia acabado de sacar de su caja. Al hacer clic encima de este elemento veo que efectivamente habia una cuenta "user" creada a parte de la cuenta con la que me habia logueado, como se ve a continuacion:

Lista Usuarios Modem Huawei

Al ver este usuario, me imagine el password que debía acompañarlo, así que cerre la sesión, intente logearme con ese usuario y al primer intento pude acceder al menu y con los mismos privilegios administrativos del usuario del Mac Address. Y si, el password era igual que el username: "user". Lo primero que hice fue entrar nuevamente con el usuario del Mac Address y eliminar esta cuenta. Luego senti curiosidad por ver si este usuario realmente venia en todos los modems de este modelo o si solo me habia caído a mi la dicha, así que revise la IP externa que tenia asignada el router en ese momento para hacer una búsqueda en todo ese rango a ver si encontraba modems de ese modelo y probar el usuario "user". Para esto utilizaria Nmap, pero antes tenia que ver como el Modem se identificaba y usar esa información para identificar los demás, así que ejecute el siguiente comando:

salida comando Nmap

Como ven, realice un escaneo a la IP del Modem con Nmap a los puertos 80 y 23 (HTTP y Telnet) con la opción "-sV" para que me muestre información de la version del servicio, en este caso el servicio Telnet en este Modem se identifica con "Huawei HG655b DSL router telnetd", así que ahora lo que resta es hacer un escaneo en un determinado rango de IP publicas y filtrar la salida para que nos muestre las que devuelvan esta linea. Utilice nuevamente Nmap pero ahora apuntando solo al puerto 23 y agregue tambien la opción "-oG - " para cambiar la forma en que se presentan los resultados y así poder filtrar mejor con "Grep" la salida, tambien amplie el rango del scan para que incluya las otras IP's vecinas del Modem en ese momento, este fue el resultado de la búsqueda de las primeras 100 IP's en ese rango:

Resultado Scan Nmap

Como ven solo entre las primeras 100 IP's aparecieron varios routers de este mismo modelo, es posible que incluso hayan mas y solo estaban apagados en ese momento. Lo interesante es que fui probando cada uno de estos Modems y efectivamente, TODOS los que encontre en este rango (y otros mas) tenian el usuario "user" con el mismo password!! Y bueno, que podría hacer alguien con el password de nuestro router ADSL? basicamente podrían controlar nuestro trafico en Internet, podrían alterar la configuración DNS ya que generalmente el mismo Modem hace el papel de servidor DNS para las computadoras que están detrás de el, tambien podrían crear reglas NAT que apunten a las computadoras detrás del router y exponerlas a Internet para realizar ataques sobre ellas y lograr acceso directo a estas.

En resumen, si tienen instalado uno de estos Routers/Modems en sus casas u oficinas, revisen la configuración en caso de que tengan este usuario creado y eliminenlo. Es posible que en otros modelos pase lo mismo, hasta ahora solo he probado este, asi que revisen su modem aunque no sea este modelo. Bueno, espero que les haya sido de utilidad, y esta información les haya llegado antes de que alguien mas entre en sus routers.

lunes, 17 de febrero de 2014

Shortcut para Aplicaciones Wine (Windows) en Mac OS X

En el Post anterior vimos como instalar aplicaciones Windows en Mac OS utilizando Wine, pero como vimos al final estas aplicaciones hay que invocarlas via Terminal (la ventana de comandos), lo cual puede ser un poco incomodo. Así que ahora veremos como crear un acceso directo (o Louncher) para la aplicación y colocarla en el Dock. Para esto primero tendremos que crear un pequeño script y también crear un icono para asignarle al script. Los iconos en Mac OS X no son simplemente un gráfico, son realmente varios archivos de la misma imagen en diferentes tamaños y resoluciones. Esto así para poder hacer el efecto de magnificacion en el Dock. Para crear el icono utilizaremos un aplicación que se encargara de crear las diferentes versiones del grafico. Bien, continuaremos con el ejemplo del post anterior con UltraVNC y vamos a crear el Luncher para esta aplicación. Para esto utilizaremos el AppleScript Editor que se encuentra en Utilities:

Ventana de AppleScript Editor

En caso de que no les haya abierto la ventana anterior al ejecutar AppleScript Editor, solo tienen que hacer clic en File-->New (o COMAND+N). En esta ventana entonces pegamos el siguiente código (extraído del site de Wine):

----------------------------------------------------------------------------------------------------------------------------------
on run
   
   --edit this to be the correct location and file to run (typically only edit after the "drive_c")
   set toRun to "$WINEPREFIX/drive_c/Program Files/UltraVNC/vncviewer.exe"
   --edit winePrefix if you are not using the default prefix
   set winePrefix to "$HOME/.wine"
   --edit wineLocation if your wine install is not the default location
   set wineLocation to "/usr/local/bin"
   --edit dyldFallbackLibraryPath to your X11 lib folder, this one is set for XQuartz on 10.6+
   set dyldFallbackLibraryPath to "/opt/X11/lib"

   -------------------------------------------------------
   --DO NOT EDIT ANYTHING BELOW THIS LINE
   -------------------------------------------------------
   set toRunPath to do shell script "WINEPREFIX=\"" & winePrefix & "\"; TEMPVAR=\"" & toRun & "\"; echo \"${TEMPVAR%/*}\""
   set toRunFile to do shell script "WINEPREFIX=\"" & winePrefix & "\"; TEMPVAR=\"" & toRun & "\"; TEMPVAR2=\"" & toRunPath & "\"; echo \"${TEMPVAR#$TEMPVAR2/}\""
   do shell script "PATH=\"" & wineLocation & ":$PATH\"; export WINEPREFIX=\"" & winePrefix & "\"; export DYLD_FALLBACK_LIBRARY_PATH=\"" & dyldFallbackLibraryPath & "\"; cd \"" & toRunPath & "\"; wine \"" & toRunFile & "\" > /dev/null 2>&1 &"
   
end run
----------------------------------------------------------------------------------------------------------------------------------

Básicamente en el script anterior solo tendremos que modificar la segunda linea (que empieza con "set toRun..") que es donde indicaremos la ruta donde esta el ejecutable de nuestro programa. La variable $WINEPREFIX al principio de esta linea indica la ruta default donde Wine instala las aplicaciones, esto es en la carpeta ".wine" dentro del profile del usuario que instalo la aplicación. Para el caso de nuestro ejemplo esta ruta sera "Program Files/UltraVNC/vncviewer.exe". Para probar que todo este bien con el código y que hayamos indicado correctamente la ruta al ejecutable, podemos probar que la aplicación abra haciendo clic en "Run", si todo esta bien, la aplicación debe ejecutarse como si la hubiésemos invocado desde la linea de comandos:

Ventana de AppleScript Editor

Si luego de un par de segundos no se ha ejecutado la aplicación, deben entonces revisar que hayan indicado correctamente la ruta al ejecutable, si se ejecuto sin problemas podemos entonces continuar y salvar el script. Para esto hacemos clic en File-->Export , nos traerá la siguiente ventana donde indicaremos que salvaremos el script como una aplicación e indicaremos en el nombre que le daremos (para este ejemplo lo nombre "UltraVNC" y lo salvare en la carpeta "Applications").

Salvar Script

Ya tenemos el louncher de nuestra aplicación creado, al hacer doble clic sobre el podremos ejecutar nuestra aplicación. Pero como habrán visto, se creo con el icono default de AppleScript, asi que ahora procederemos a crear un icono para nuestra aplicacion y agregarselo a nuestro louncher. Los iconos en Mac OS tienen la extensión "icns", pero para asignarle un icono al louncher no bastara con solo asignar esta extensión a un grafico y agregarlo, como les mencione al inicio este tipo de archivo es mas bien una colección de gráficos que tiene diferentes versiones de la imagen en diferentes tamañosAsí que para crear nuestro icono utilizaremos la aplicación "FastIcns" la cual pueden descargar en este link. Con esta aplicación solo tendremos que buscar el icono de la aplicación en Google, ya sea en PNG o JPG, para seguir con el ejemplo buscaremos el icono de UltraVNC en Google y lo descargaremos. Cuando ejecuten FastIcns verán un pequeno cubo en la pantalla, deben arrastrar ahi dentro el icono de la aplicación que descargaron. Luego salvar el archivo haciendo clic en "File-->Save As" y salvarlo como ICNS, como se muestra a continuación:

Crear icono con FastICNS

Una vez hemos salvado el archivo solo tenemos que ir al louncher, hacer clic encima y luego presionar la tecla "Command + I", o hacer clic en "File -->Get Info" y nos abrira la ventana de propiedades del archivo. Hacemos clic encima del icono generico que tiene el archivo (verán que se sombreara en azul) y arrastramos a esta area el archivo ICNS que acabamos de crear, con esto se le asignara el icono al louncher.

Asignar icono al Louncher

Y ya con esto tenemos nuestro louncher a la aplicación que instalamos con Wine que podemos ejecutar como cualquier otra haciendo solo un clic encima de su icono. Solo nos resta arrastrar el icono del louncher al Dock y lo tendremos como cualquier otra aplicación:

Icono de UltraVNC en Dock