Mostrando entradas con la etiqueta microsoft. Mostrar todas las entradas
Mostrando entradas con la etiqueta microsoft. Mostrar todas las entradas
Auditar logs de accesos de servidores ISA utilizando LogParser
La semana pasada me tocó auditar accesos a Internet para buscar visitas a sitios Web maliciosos o inadecuados y detectar desvíos de seguridad. Para llevar a cabo esta tarea tuve que filtrar los logs de un servidor ISA que se utiliza como proxy para obtener información útil de acuerdo a diferentes criterios de búsqueda.

En este artículo voy a proveer información sobre cómo obtener de forma rápida y precisa esta información utilizando herramientas de línea de comandos. Estas herramientas permiten redirigir la salida a archivos de texto, y realizar el trabajo de forma eficiente y automágica.


Definiciones preliminares

ISA Server: Gateway integrado de seguridad perimetral que permite proteger el entorno de TI frente a las amenazas de Internet, además de proporcionar a los usuarios un acceso remoto seguro a las aplicaciones y datos corporativos (Fuente: Microsoft).

LogParser: LogParser es una herramienta de línea de comandos que provee consultas universales a archivos de texto tales como archivos de logs, archivos XML y CSV y fuentes de datos del sistema operativo Windows tales como logs de eventos, registry, el sistema de archivos y Active Directory (Fuente: Microsoft).

Bash: Programa cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de Linux (Fuente: Wikipedia).


Filtrado de logs

Los logs de acceso de los servidores ISA generalmente se encuentran en la carpeta:

C:\Program Files\Microsoft ISA Server\ISALogs

Para obtener información útil de estos logs utilizaremos la herramienta LogParser provista por Microsoft de forma gratuita. LogParser toma una expresión SQL como parámetro en la línea de comandos, y muestra como resultado las líneas que contienen coincidencias para la misma. Utilizando esta herramienta es posible filtrar los logs de los servidores ISA para obtener información útil de forma resumida.

Al ejecutar LogParser desde el menú de inicio se abre una consola en el directorio donde se instaló y muestra la ayuda:

Microsoft (R) Log Parser Version 2.2.10
Copyright (C) 2004 Microsoft Corporation. All rights reserved.

Usage: LogParser [-i:] [-o:] |
file:[?param1=value1+...]
[] []
[-q[:ON|OFF]] [-e:] [-iw[:ON|OFF]]
[-stats[:ON|OFF]] [-saveDefaults] [-queryInfo]

LogParser -c -i: -o:
[] []
[] [-multiSite[:ON|OFF]]
[-q[:ON|OFF]] [-e:] [-iw[:ON|OFF]]
[-stats[:ON|OFF]] [-queryInfo]

-i: : one of IISW3C, NCSA, IIS, IISODBC, BIN, IISMSID,
HTTPERR, URLSCAN, CSV, TSV, W3C, XML, EVT, ETW,
NETMON, REG, ADS, TEXTLINE, TEXTWORD, FS, COM (if
omitted, will guess from the FROM clause)
-o: : one of CSV, TSV, XML, DATAGRID, CHART, SYSLOG,
NEUROVIEW, NAT, W3C, IIS, SQL, TPL, NULL (if omitted,
will guess from the INTO clause)
-q[:ON|OFF] : quiet mode; default is OFF
-e: : max # of parse errors before aborting; default is -1
(ignore all)
-iw[:ON|OFF] : ignore warnings; default is OFF
-stats[:ON|OFF] : display statistics after executing query; default is
ON
-c : use built-in conversion query
-multiSite[:ON|OFF] : send BIN conversion output to multiple files
depending on the SiteID value; default is OFF
-saveDefaults : save specified options as default values
-restoreDefaults : restore factory defaults
-queryInfo : display query processing information (does not
execute the query)


Examples:
LogParser "SELECT date, REVERSEDNS(c-ip) AS Client, COUNT(*) FROM file.log
WHERE sc-status<>200 GROUP BY date, Client" -e:10
LogParser file:myQuery.sql?myInput=C:\temp\ex*.log+myOutput=results.csv
LogParser -c -i:BIN -o:W3C file1.log file2.log "ComputerName IS NOT NULL"

Help:
-h GRAMMAR : SQL Language Grammar
-h FUNCTIONS [ ] : Functions Syntax
-h EXAMPLES : Example queries and commands
-h -i: : Help on
-h -o: : Help on
-h -c : Conversion help


Ejemplos de consultas típicas

El servidor ISA guarda cada acceso en un registro, el cual tiene una cantidad fija de campos. Por ejemplo para cada pedido: c-ip contiene la ip que lo realizó; date contiene la fecha; time la hora; r-host el nombre del servidor al cual se accedió; etc. Cada registro es una línea y cada campo se separa con un tabulador, de acuerdo al formato W3C.
Los logs del servidor ISA que me tocó auditar comienzan con la siguiente cabecera, que declara la versión del servidor y los nombres de los campos:

#Software: Microsoft(R) Internet Security and Acceleration Server 2000
#Version: 1.0
#Date: 2011-02-06 00:00:02
#Fields: c-ip cs-username c-agent sc-authenticated date time s-svcname s-computername cs-referred r-host r-ip r-port time-taken cs-bytes sc-bytes cs-protocol cs-transport s-operation cs-uri cs-mime-type s-object-source sc-status s-cache-info rule#1 rule#2

Al utilizar LogParser para filtrar logs de un servidor ISA, se debe indicar que el formato de entrada es W3C, y que los campos se separan con tab. Luego de estos parámetros opcionales (tipo de entrada y separador) se indica la consulta SQL que se desea realizar.
El archivo de log se pasa como parámetro dentro de la consulta SQL, puede ser un archivo local o un share. Además se puede utilizar asterisco para leer de múltiples archivos de log.
Debido a que el nombre de archivo no puede contener espacios, se deben reemplazar los mismos con '\u0020'.
Los nombres de los campos de los registros se obtienen directamente desde el archivo de log (en la 3er línea del archivo que se encuentra comentada con numeral). Es posible redireccionar la salida a un archivo utilizando el caracter '>' o desde la consulta SQL utilizando la orden "INTO".


Ver todos los sitios visitados por la IP 192.168.1.100:

C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT DISTINCT r-host AS Site FROM C:\Program\u0020Files\Microsoft\u0020ISA\u0020Server\ISALogs\*.log WHERE c-ip='192.168.1.100'"

El identificador DISTINCT delante del campo r-host se utiliza para que no repita resultados.


Ver todas las IP que ingresaron a facebook:

C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT DISTINCT c-ip AS IP, r-host AS URL FROM \\logserver\ISALogs\*.log WHERE r-host LIKE '%facebook.com%'"


Ver la cantidad de visitas por sitio:


C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT COUNT(*) AS Hits, r-host AS Site FROM \\logserver\ISALogs\*.log GROUP BY Site ORDER BY Hits DESC" > hits.txt

La orden COUNT(*) en conjunto con GROUP BY suman la cuenta para cada valor distinto del campo r-host. La orden ORDER BY en conjunto con DESC se utilizan para ordenar el resultado de forma descendente.


Ver las visitas que realizó la IP 192.168.1.50 entre la 1:00 AM y 2:00 AM:

C:\Program Files\Log Parser 2.2>Logparser -i:W3C -rtp:-1 -separator:'tab' "SELECT time AS Time, cs-uri AS URI FROM C:\Program\u0020Files\Microsoft\u0020ISA\u0020Server\ISALogs\*.log WHERE c-ip='192.168.1.50' AND (TO_TIME(time) BETWEEN TIMESTAMP('01:00:00','hh:mm:ss') AND TIMESTAMP('02:00:00','hh:mm:ss'))" > filtered_log.txt

Por defecto, LogParser muestra la salida paginada. La opción -rtp:-1 se utiliza para evitar esto y poder redireccionar la salida.


Ver los clientes del Proxy:


C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT c-ip as Client INTO clients.csv FROM C:\Program\u0020Files\Microsoft\u0020ISA\u0020Server\ISALogs\*.log GROUP BY Client ORDER BY Client" -o:CSV

En este caso se exporta la salida como un archivo CSV directamente en la consulta utilizando la orden "INTO". La opción -o:CSV se utiliza para indicarle a LoggParser que la salida se exporta a un archivo CSV.


Filtrado de logs utilizando bash

Si se dispone de acceso a una consola bash, es posible realizar esta misma tarea utilizando herramientas libres como grep, sed, awk, sort, etc. Está fuera del alcance de este artículo explicar el funcionamiento de cada una de estas herramientas. A continuación se muestra un ejemplo práctico.


Ver todos los sitios visitados por la IP 192.168.1.100:

$ time grep '192.168.1.100' WEBEXTD20120101.log | awk –F"\t" '{print $10}' | sort | uniq

Con grep se buscan todos los registros que contienen la dirección IP 192.168.1.100. Luego se utiliza awk para extraer la décima columna (separadas por tab), que corresponde con el campo r-host. Finalmente se ordena el resultado y se eliminan los registros repetidos.
Se utiliza el comando time para medir el tiempo que tarda en realizar el trabajo. Tanto utilizando LogParser como bash scripts los tiempos de ejecución son bajos.
Configurando una red inalámbrica hogareña
Luego de un período con grandes cambios a nivel personal, vuelvo a tener tiempo (y ganas) de escribir un artículo. En este caso para contar mis experiencias configurando mi red inalámbrica hogareña.

Para comenzar el desarrollo de la red hace falta conseguir lo más importante, que es el router inalámbrico. La marca/modelo a comprar depende del área a cubrir y el dinero que dispongamos. En mi caso opté por un router TP-LINK TL-WR340G ya que sólo me interesa cubrir mi departamento y es una opción super económica.

La configuración de este router es extremadamente sencilla: conectamos el cable de red de nuestro ISP al router; conectamos nuestra PC/Notebook (utilizando una IP fija 192.168.0.0/24) a una boca ethernet del router; y finalmente ingresamos por Web al router ingresando 192.168.1.1 en nuestro navegador.

La interfaz Web es muy intuitiva y haciendo unos pocos clics ya tenemos la red inalámbrica funcionando con DHCP. Lo más importante son dos cuestiones. La primera: dependiendo del servicio de Internet contratado, será necesario configurar PPPoE (Point-to-Point Protocol over Ethernet) para conectarse al ISP (con un nombre de usuario y contraseña otorgados por el proveedor). La segunda: habilitar la seguridad Wireless en el router (autenticación y encripción). A pesar de que WEP es mejor que nada, es un protocolo que posee varias debilidades, por lo tanto es altamente recomendable utilizar WPA/WPA2. Basta con seleccionar WPA-PSK (PSK: Pre-Shard Key, autenticación mediante clave compartida) en el router y utilizar una clave fuerte (formada por letras mayúsculas, minúsculas, números, símbolos y lo suficientemente larga).

Luego de configurar el router (la parte sencilla) la tarea de configurar los clientes no fue tan trivial.

El primer cliente fue una Notebook con Windows XP instalado de base con su placa de red inalámbrica funcionando correctamente. Para conectarlo a nuestra red simplemente hacemos clic derecho sobre el ícono del adaptador de red inalámbrico en la barra de tareas, luego clic en "Ver redes inalámbricas disponibles", luego seleccionamos nuestra red, clic en "Conectar" e introducimos la contraseña dos veces. Hasta acá muy fácil y bonito.

El siguiente cliente fue una Notebook con Ubuntu 9.04. Esta versión de Ubuntu ya incorpora los drivers para la placa de red Realtek RTL8187B y funciona correctamente. Pero los problemas comenzaron al tratar de conectarse a una red protegida con WPA. Ya sea utilizando el administrador de redes "network-manager" o "Wicd", la conexión se pierde luego de un corto lapso de tiempo. El error se repite una y otra vez. Luego de investigar un tiempo en Internet supe que se trata de un problema de autenticación (bastante común entre los usuarios de esta distro) entre gnome-keyring/Dbus/Network Manager. Para solucionarlo le otorgué permisos para utilizar adaptadores inalámbricos al usuario en cuestión desde el menú "System > Administration > Users and Groups". Luego de esto, utilizando Wicd, la red comenzó a funcionar "más o menos bien" aunque tarda mucho tiempo en detectar y conectarse a la red y sufre alguna desconexión esporádica.
La solución a implementar para que la red funcione perfectamente en este sistema operativo es la misma que describo más adelante para Slackware.

El próximo cliente fue una PC con Windows XP. Como no tenía un adaptador de red inalámbrico decidí comprar uno USB (la solución más económica y práctica para mis necesidades). Luego de conectar el dispositivo cometí el error de instalar los controladores directamente desde el disco compacto que incluía en la caja. Este instalador agregó un horrible manejador de redes inalámbricas en la barra de tareas que reemplazó al manejador de redes inalámbricas de Windows. Luego de la clásica reiniciada, el manejador no detectó ninguna red y no me permitió utilizar el de Windows. Por lo tanto tuve que desinstalar los controladores, reiniciar y comenzar de nuevo, esta vez utilizando el "Asistente para agregar hardware" en lugar del instalador del CD. Cuando se abre el asistente insertamos el CD y presionamos en "Siguiente". Luego de que Windows detecta los drivers que se encuentran en el CD, seleccionamos el driver de acuerdo a nuestra versión de Windows y continuamos con la instalación.
Una vez instalado el hardware utilizamos (previa reiniciada) el manejador de redes inalámbricas de Windows que se encuentra en la barra de tareas y nos conectamos perfectamente a nuestra red (esta vez sin utilizar el horrible manejador de redes incorporado en el CD del fabricante) como para el caso del primer cliente.

Luego de renegar con Windows y Ubuntu me puse el overol para aprender cómo funcionan las cosas de la mano de Slackware. La versión 13.1 instalada en la PC incorpora los drivers para el adaptador USB (utiliza el mismo chip Realtek RTL8187B de la notebook) por lo tanto la red inalámbrica funciona perfectamente.
Ya que vamos a conectarnos a una red inalámbrica con seguridad WPA, no basta con utilizar iwconfig para configurar el adaptador, es necesario utilizar wpa_supplicant. WPA Supplicant es el componente del protocolo IEEE 802.1X/WPA utilizado en las estaciones cliente. Implementa la negociación de claves con un autenticador WPA (en este caso nuestro router). Funciona como un demonio que se ejecuta en background y actúa como un componente back-end que controla la conexión wireless. En Slackware 13.1 viene incluido en la instalación base y en las distribuciones basadas en Debian lo provee el paquete wpasupplicant.
wpa_supplicant toma la configuración de las redes inalámbricas con seguridad WPA desde el archivo /etc/wpa_supplicant.conf. Para agregar una red en este archivo se utiliza el comando wpa_passphrase con el SSID de la red como parámetro:

$ wpa_passphrase myssid


Este comando lee la clave compartida de la red WPA (la misma que ingresamos en el router) por la entrada estándar y genera la clave encriptada para almacenar en el archivo /etc/wpa_supplicant.conf (para no tener que escribir la contraseña cada vez que nos conectamos a la red). Copiamos la salida de wpa_passphrase y la pegamos al final del archivo /etc/wpa_supplicant.conf.
Luego de estos pasos podemos conectarnos a la red inalámbrica:

# iwconfig wlan0 essid "myssid"
# ifup wlan0
# wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf
# dhcpcd wlan0


El cliente WPA Supplicant es bastante vervoso e imprime por salida estándar todos los pasos durante la autenticación con el AP. Luego podemos verificar que la red haya tomado una dirección IP desde el AP utilizando el comando ifconfig.

Parece una tarea tediosa, pero el aprendizaje es invaluable y la red funciona excelentemente.

Aunque si no desean escribir estos 4 comandos cada vez que se conecten a la red, en Slackware pueden agregar un script en /etc/rc.d que lo haga automáticamente o en las distribuciones basadas en Debian pueden editar el archivo /etc/network/interfaces:

auto wlan0
iface wlan0 inet dhcp
up wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -Bw
down killall wpa_supplicant


La opción -B pone el demonio wpa_upplicant en background y la opción -w le indica que no haga anda hasta que la interfase esté levantada.

Luego de esta tarea tengo mi red inalámbrica funcionando en perfectas condiciones. A aquellos usuarios de Linux espero que les sirva la info y a los de Windows, bueno... nadie es ferpecto.

Saludos!


P.S.: Perdón por las screenshots!


Referencias:

  • http://hostap.epitest.fi/wpa_supplicant/
  • http://www.enterprisenetworkingplanet.com/netsecur/article.php/3594946/Linux-on-Your-WLAN-Configure-WPA.htm
Escalación de privilegios en Windows XP
Recientemente estuve tratando de escalar privilegios en una máquina local con Windows XP y, como es de esperarse, encontré una variedad de exploits en Internet. Voy a explicarles los más sencillos y efectivos dividiendo la tarea en dos partes: escalar privilegios desde una cuenta de usuario restringida hasta Administrator; y escalar privilegios desde Administrator hasta SYSTEM, lo que nos dará el control total del sistema.

Primera parte: "from pepe to Administrator"

Primero veamos como lograr privilegios de Administrator partiendo de una cuenta de usuario con privilegios restringidos. Para lograr esta escalada hay dos técnicas básicas, la primera consiste en sobreescribir el ejecutable C:\WINDOWS\SYSTEM32\sethc.exe (lo que requiere permisos de escritura en el directorio C:\WINDOWS\SYSTEM32) y la segunda consiste en explotar una vulnerabilidad en el procedimiento de ejecución de aplicaciones de Windows (la cual requiere permisos de escritura en el directorio C:\).

Veamos cómo funciona la primer técnica: Por defecto, Windows XP instala el software de ayuda y accesibilidad que se activa pulsando la tecla SHIFT 5 veces seguidas. Al hacer esto, aparece un cuadro de diálogo que permite configurar la aplicación sethc.exe ubicada en C:\WINDOWS\SYSTEM32.


El ataque consiste en sustituir sethc.exe por cmd.exe (esto se puede hacer con un disco de arranque ntfsdos o con un live cd de alguna distribución de Linux si no se puede escribir en el directorio C:\WINDOWS\SYSTEM), de esta forma cuando pulsemos la tecla SHIFT 5 veces seguidas se ejecutará un intérprete de comandos. Hasta este punto no es algo muy grave, pero la vulnerabilidad aparece cuando pulsamos SHIFT 5 veces antes de iniciar sesión ya que el interprete de comandos que se ejecuta lo hace bajo privilegios Administrator.


A continuación, cualquier comando que ejecutemos será como usuario Administrator. Lo ideal es crear una nueva cuenta Administaror, lo cual se hace de dos formas:
  • Ejecutando los comandos:

    • net user nuevoadmin 1234password /add
      net localgroup administrators nuevoadmin /add

    De esta forma creamos el usuario "nuevoadmin" con privilegios de administrador y contraseña "1234password"

  • Ejecutando "Computer Management"

    • compmgmt.msc

    Esta aplicación permite agregar usuarios mediante una interfaz gráfica.

Ahora veamos la segunda técnica: Esta técnica consiste en explotar una vulnerabilidad en el procedimiento de ejecución de aplicaciones de Windows. Cuando lanzamos una aplicación, si la ruta al ejecutable no contiene espacios, como por ejemplo:
C:\WINDOWS\system32\cmd.exe
Windows localiza el archivo cmd.exe e inicia su ejecución. Si en cambio la ruta al ejecutable contiene espacios debemos utilizar comillas dobles, como por ejemplo:
"C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe"
para que Windows localice correctamente el archivo ejecutable. En la (vieja) notación 8.3 es posible evitar el uso de comillas mediante:
C:\Progra~1\McAfee\VirusS~1\Mcshield.exe

Pero qué sucede si olvidamos las comillas y ejecutamos:
C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe

Puede parecer igual a lo anterior pero en realidad sucede lo siguiente:
  • Windows intenta localizar y ejecutar el archivo C:\Program.exe

  • Si ese archivo no existe, Windows intenta localizar y ejecutar el archivo C:\Program Files\McAfee\VirusScan.exe

  • Si ese archivo no existe, Windows finalmente intenta localizar y ejecutar el archivo originalmente deseado C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe

Esto nos abre una puerta para lograr el acceso al sistema con mayores privilegios. Por qué? La mayoría de los servicios en Windows se ejecutan como SYSTEM y algunos se encuentran bajo el directorio "C:\Program Files". Entonces veamos la siguiente situación: supongamos que Mcshield.exe es un servicio que se inicia automáticamente con Windows y se ejecuta en el contexto de LocalSystem. La ruta al ejecutable es la mencionada anteriormente, pero sin comillas. Cuando Windows inicia, trata de ejecutar el servicio Mcshield automáticamente como LocalSystem, pero debido a que no hay comillas en la ruta al archivo Mcshield.exe tratará de iniciar (siempre como LocalSystem) primero lo siguiente:
  • C:\Program.exe

  • C:\Program Files\McAfee\VirusScan.exe

Por lo tanto es posible crear nuestro propio "servicio" Program.exe o VirusScan.exe y situarlo en la ubicación donde Windows accidentalmente tratará de ejecutarlo. El servicio puede ser algo básico como agregar un nuevo usuario administrador, como expliqué anteriormente.
Tal vez se pregunten: ¿puede ser que algún servicio tenga la ruta al ejecutable sin comillas? La respuesta es sí, yo lo probé y quedé sorprendido por la cantidad de veces que se ejecutó el "servicio" Program.exe al iniciar Windows. Solamente hay que encontrar uno que se ejecute con privilegios >= Administrator, o plantar el archivo Program.exe y esperar que un administrador inicie sesión en el equipo. En Windows XP es posible listar los servicios que se ejecutan automáticamente al iniciar el sistema desde Start > Settings > Control Panel > Administrative Tools > Services.
Una posible limitación es encontrarse sin permiso de escritura en el directorio "C:\" o "C:\Program Files\McAfee\" pero siempre podemos plantar el "servicio" utilizando un disco de arranque ntfsdos o un live cd. La última barrera sería no poder bootear el sistema desde unidades de disco o usb, en este caso podemos intentar resetear la BIOS quitando la pila.
Si tenemos acceso físico, el sistema está comprometido.

Segunda parte: "from Administrator to SYSTEM"

Bajo circunstancias normales, un usuario no puede ejecutar código como SYSTEM, sólo el sistema operativo tiene esta habilidad, pero utilizando el intérprete de comandos se puede abusar del comando ‘at’ para que Windows ejecute nuestro escritorio con privilegios SYSTEM. El comando ‘at’ despacha comandos y programas para ejecutarse en una fecha y tiempo específico. Este comando se puede utilizar sólo cuando el servicio “Task Scheduler” se está ejecutando y el usuario que lo ejecuta es miembro del grupo “local Administrators”.
Supongamos que una política de Windows nos impide modificar la configuración del proxy en Internet Explorer, a pesar de tener privilegios de administrador local. En la siguiente captura se observa la ventana de configuración de red de Internet Explorer (se accede desde “Tools > Internet Options… > Connections > LAN Settings…”).


Para comenzar, abrimos cms.exe y ejecutamos el comando ‘at’. Se observa que el comando está habilitado (de lo contrario retorna “Access is denied.”) lo que nos permite agregar una nueva tarea programada, como se observa en la siguiente captura:


Cuando el reloj alcanza las 8:27 se ejecuta la tarea “cmd.exe”, la diferencia es que esta tarea se ejecuta con privilegios SYSTEM ya que es iniciada por el servicio “Task Scheduler” que corre bajo la cuenta Local System. En la siguiente captura se observa el intérprete de comandos iniciado automáticamente, la barra de título indica ‘svchost.exe’ (Service Host) en lugar de ‘cmd.exe’. A partir de esta consola podemos ejecutar cualquier aplicación con privilegios SYSTEM:


Si abrimos Internet Explorer desde esta consola tenemos acceso a todas las opciones bloqueadas anteriormente. Esto nos permite, por ejemplo, modificar la configuración del servidor Proxy (estas opciones estaban grisadas en la primer captura):


Si deseamos un entorno de escritorio ejecutado bajo privilegios SYSTEM, primero debemos terminar el proceso “explorer.exe” para cerrar el entorno de escritorio actual:


Una vez que terminamos el proceso “explorer.exe” desaparece el escritorio y todas las ventanas abiertas, excepto la consola con privilegios SYSTEM. A continuación ejecutamos “explorer.exe” desde esta consola, lo que inicia un nuevo entorno de escritorio. Aunque el nombre de usuario corresponde con el nombre del sistema, lo que indica que el entorno de escritorio está ejecutando bajo privilegios SYSTEM. A partir que aquí, todas las aplicaciones que ejecutemos desde el escritorio se ejecutaran bajo privilegios SYSTEM. Es posible resetear la contraseña del administrador local, matar procesos pertenecientes a SYSTEM y acceder a todos los componentes bloqueados del sistema.
Para evitar este ataque, se debe deshabilitar el servicio “Task Scheduler” siempre que no sea necesario. Pero si es necesario, se debe deshabilitar el comando ‘at’ y utilizar el comando ‘schtasks’ (la documentación de este comando se encuentra en http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx).

Conclusión

Explotando estas vulnerabilidades, logramos acceso con privilegios SYSTEM a partir de una cuenta limitada "pepe". Espero que les haya gustado.

NOTA: La información presentada en este artículo fue para fines didácticos y no debía utilizarse para abusar de sistemas Windows ;)
Deshabilitar ejecución en directorios por política (Windows)

Ya se que van a pensar, desaparezco un buen tiempo y encima aparezco con otro post sobre aplicaciones MS... a mi también me da bastante cosa, pero el trabajo me lleva a esto, así que, a falta de tiempo para crear artículos sobre otros temas, comparto algo que me parece interesante para todos los que trabajan en seguridad.

En el entorno Windows XP (y Windows en general), deshabilitar la ejecución de programas se puede realizar utilizando políticas de grupo. Estas políticas se pueden configurar por máquina, o bien a través de Active Directory para aplicarlas a varias máquinas o usuarios. A través de estas políticas, como mostraré en un ejemplo, podemos desactivar la ejecución sobre particiones enteras, o también desactivar selectivamente *.exe, *.bat, etc.


Crear reglas basadas en path

Para aplicar la política en una dada máquina, se debe abrir el editor de políticas (“Start” -> “Run…” -> gpedit.msc). En el editor de políticas nos dirigimos a “Computer Configuration” -> “Windows Settings” -> “Security Settings” -> “Software Restriction Policies”. Si el directorio Software Restriction Policies se encuentra vacío, hacemos click derecho sobre este y elegimos crear un nuevo set de políticas. Una vez que tenemos la carpeta “Software Restriction Policies” poblada, nos dirigimos a “Additional Rules” como se muestra en la imagen.

Dentro de “Additional Rules” hacemos click derecho y elegimos “New Path Rule”, donde podremos ingresar el path a la carpeta donde desdeamos deshabilitar la ejecución. En la figura se muestra cómo deshabilitar la ejecución en el disco D:\, es decir, los usuarios no podrán ejecutar ninguna aplicación que se encuentre en este disco.

También es posible configurar directorios donde deseemos que esté permitida la ejecución. Esto lo hacemos de la misma forma que el caso anterior, pero en lugar de elegir Disallowed en el “Security Level”, elegimos “Unrestricted”.Eliminar una regla es tan simple como dar clic derecho sobre la regla y elegir Delete.

Los paths pueden contener expresiones regulares para hacer la restricción más fina. Si por ejemplo queremos restringir la ejecución de .exe pero no la de otros tipos de ejecutables (como los .bat o .com) en el D:\, podemos colocar la sentencia D:\*.exe en lugar de solo D:\


Otras formas de restringir ejecución

Además de deshabilitar ejecución por path, podemos deshabilitar ejecución por:- certificado: dependiendo de quién firme la aplicación, habilitamos la ejecución de la misma o no. Las aplicaciones pueden venir firmadas digitalmente, y agregando el certificado a nuestra lista podemos restringir o habilitar la ejecución de estos programas.

- hash: agregamos el hash de una aplicación a la lista y configuramos si esa aplicación puede ejecutarse o no.
- internet zone: podemos configurar qué sitios de internet tienen acceso a instalar aplicaciones en nuestra máquina.


Valores por defecto

Windows por defecto mantiene la política de permitir acceso irrestricto. La política por defecto se configura en “Software Restriction Policies” -> “Security Levels”. Los valores que se encuentran allí son “Unrestricted” y “Disallowed”. Para cambiar entre estos valores, simplemente damos clic derecho en uno de ellos y elegimos “Set as Default”.

NOTA: es importante destacar que si configuramos que el sistema por defecto no permita la ejecución de programas, deberemos configurar en Additional Rules todas los paths desde donde esté permitido ejecutar (por ejemplo, Program Files). En caso contrario, no podremos ejecutar ninguna aplicación.


Aplicando las políticas

Para aplicar las políticas recién configuradas, desde la línea de comandos ejecutamos “gpupdate /force”, o bien nos deslogueamos y volvemos a loguear.

Buena Referencia

Software Restriction Policies
Tunear logs de SQL Server
Hace un par de semanas vengo trabajando en crear logs de SQL Server que valgan la pena para así poder realizar trabajos de revisión y auditoría de lo que sucede en los servidores de base de datos de la empresa. El tema es que, aunque a uno le parezca totalmente simple activar los logs de un sistema tan utilizado y (supuestamente) fácil de administrar, esto no es así.
Por defecto SQL Server no loguea casi nada útil, solamente cuando ocurre un error grave o cuando se hace backup de la base de datos. Si piensan que su motor de base de datos está (como debería) logueando información para poder controlar las acciones... piensen de nuevo!, revisen los logs y diganme si encuentran algo en los logs que les sirva!

Por supuesto que el DBMS en cuestión cuenta con sistema de logueo de eventos, pero hay que activarlo a mano y conocer un poco sobre el funcionamiento de algunos store procedures creados para esto. Una de las primeras cosas que uno se encuentra cuando busca logs de SQL Server, es el modo de auditoría C2, pero existen otra forma más efectiva de loguear, la cual es usando los traces de SQL Server. A continuación explico un poco de estas dos modalidades de logueo.

Cabe destacar que activar sistemas de logueo siempre generan una sobrecarga en el sistema. Dependiendo lo que deseemos loguear, la sobrecarga será mayor o menor, pero es un punto a tener en cuenta.


Modo de auditoría C2

Este modo fue diseñado para poder cumplir con la clase C2 del Criterio de evaluación de confianza de un sistema computacional creado por el Department of Defence yankee (DoD). Cuando se activa esta modalidad de logueo, todos los eventos y todas las columnas pertenecientes a cada evento se loguearan. Como se podrán imaginar, este nivel de logging es extremo y poco útil para la mayoría de los sistemas. Revisar estos logs es para un monje Shaolin drogado, porque por más filtros que pongamos, seguiremos teniendo miles de entradas repetitivas e inútiles.
Para que se den una idea del nivel de logueo C2, lo probamos en una base de datos con relativo poco movimiento de datos y el log creció a más de 1GB en un par de horas! 1GB de texto! se imaginan lo que es??? pues mucho!

Si luego de toda esa introducción al modo audit C2 todavía tienen ganas de probarlo, lo pueden hacer ejecutando las siguientes sentencias T-SQL:
SP_CONFIGURE 'show advanced options', 1;
GO
RECONFIGURE
GO
SP_CONFIGURE 'c2 audit mode', 1;
GO
RECONFIGURE
GO
SP_CONFIGURE 'show advanced options', 1;
GO

Luego de ejecutar las sentencias anteriores, deberán reiniciar el motor de base de datos, así que haganlo en algún momento donde no tengan mucho movimiento de datos.
Para revisar que el modo quedó activado, pueden ejecutar la siguiente sentencia:
SELECT value FROM sys.configurations
WHERE name = 'c2 audit mode';
GO
Los logs se almacenan en el directorio \MSSQL\Data (osea, donde está instalado el SQL Server) y son archivos .trc de 200MB cada uno. Los archivos se van generando a medida que se van llenando, osea, se arranca con un archivo, cuando llega a 200MB, se cierra y se abre uno nuevo.
Recuerden lo que les dije al principio, estos logs son monstruosos, así que si tienen poco espacio en el disco, vigilenlos! Sino les comerá el disco y al almacenarse en la misma partición que la base de datos, puede que les genere un Denial of Service si el disco se llena!


SQL Traces

Para no volvernos locos con los logs generados por el modo C2, podemos customizar lo que deseamos loguear utilizando trazas (traces), las cuales creamos con una serie de store procedures que trae SQL Server. La explicación de cada uno de estos store procedures la pueden encontrar en la página oficial de MS, dependiendo la versión de SQL Server que tengan, puede variar un poco, pero hasta donde vi es bastante similar en todas las versiones. Yo voy a explicar el sistema para SQL Server 2005, pero no debería variar mucho para SQL Server 2008.

SQL Server basa su funcionamiento en eventos y por ello, los logs se arman en base a los eventos que queremos loguear. Por cada evento tenemos una serie de atributos que podemos loguear. Muchos atributos son comunes para todas los eventos, pero algunos son específicos para cierta clase de eventos. Nuestro trabajo trata sobre ver que eventos queremos loguear y qué atributo de cada evento deseamos... no es un trabajo fácil, porque existen como 200 eventos a loguear, y contamos con 64 atributos posibles, encontrar lo que realmente necesitamos llevará un tiempo de pruebas.

Para comenzar les puedo dar el formato de como crear una traza básica:
-- declaramos las variables necesarias
DECLARE @traceID int
DECLARE @maxFileSize bigint
DECLARE @traceFile nvarchar(245)
DECLARE @on bit
DECLARE @date nvarchar(25)

-- seteamos el tamanio para los archivos donde se almacenan los logs
set @maxfilesize = 200
-- seteamos la localización de los logs
set @date = convert(nvarchar(25), GETDATE())
set @date = REPLACE(@date,':','.')
set @date = REPLACE(@date,' ','_')
set @traceFile = N'D:\SQL_Traces\trace_'+@date+'.trc'


-- creamos la traza, obtienendo un id que se almacenara en @traceID. Indicamos que cuando se alcance el maximo del archivo, se cree otro archivo nuevo.
EXEC sp_trace_create @traceID OUTPUT, 2, @traceFile, @maxFileSize, NULL

-- decimos que queremos activar el evento
set @on = 1

-- activamos el evento 109 (auditar cuando se agrega un login a la base de datos) y queremos guardar las columnas 1 (el texto generado por el evento) y 11 (el nombre de login).
EXEC sp_trace_setevent @traceID, 109, 1, @on
EXEC sp_trace_setevent @traceID, 109, 11, @on

-- activamos el evento 110 (agregar un miembro a un rol) con las mismas columnas que antes.
EXEC sp_trace_setevent @traceID, 110, 1, @on
EXEC sp_trace_setevent @traceID, 110, 11, @on

-- iniciamos la traza
EXEC sp_trace_setstatus @traceID, 1
GO
Traté de comentar todo lo relevante en el código, pero es interesante destacar el significado de algunas líneas. Por un lado al principio decimos el tamaño máximo que debe alcanzar cada archivo de log (se utiliza el formato propietario .trc). Luego creamos un nombre para estos archivos. Como no deseamos pisar trazas anteriores, le agregué la fecha al nombre de archivo.
Una vez seteadas las variables, creamos la traza con el store procedure sp_trace_create, al cual debemos pasarle una variable donde nos retornará el id de la traza creada. Con el siguiente valor le podemos especificar opciones, yo coloqué 2 para indicar que una vez que se llena el archivo de log (osea, alcanzamos los 200MB), que se cree un nuevo archivo... es decir, vamos creando archivos de 200MB. Como se imaginarán, el siguiente parámetro especifica el nombre del archivo donde guardar las trazas, y el que se encuentra al lado es el tamaño de los archivos. Por último, como no nos interesan los valores stoptime y filecount, colocamos un NULL.
Ahora pasamos a setear los eventos que queremos loguear. Primero utilizamos una variable del tipo bit que nos servirá para decir que queremos poner en on el evento... esa variable la utilizaremos en el store procedure sp_trace_setevent. Las siguientes líneas simplemente activan los eventos agregar un login y agregar usuario a un rol utilizando la citada sp_trace_setevent. Para ambos casos logueamos las columnas 1 y 11, las cuales nos dicen el texto del evento (osea, lo que pasó) y el nombre del usuario de login que causó el evento. La lista completa de eventos que pueden loguear y las columnas que se pueden loguear, vean el mismo manual de sp_trace_setevent... armense de paciencia porque son muchos...
Por último, iniciamos la traza utilizando el store procedure sp_trace_setstatus, donde le damos el id de la traza que queremos activar, y le pasamos un 1 para indicar que iniciamos, si pusiéramos un 0 estaríamos deteniendo y con un 2 la eliminamos del sistema.

Muy bien, con todo lo anterior ya tenemos la traza en ejecución y logueando eventos. Qué pasa si queremos detenerla? utilizamos el citado sp_trace_setstatus. Como habrán visto, sp_trace_setstatus necesita dos parámetros, el id de la traza y el indicador de qué hacer con la traza (comenzar, detener, eliminar). Pues cómo obtenemos el id de la traza que deseamos? acuerdense que antes utilizábamos la variable @traceID, pero esa variable la perdemos una vez q termina la ejecución de las sentencias anteriores. No desesperen, hay una forma de hacer esto.
Dado que pueden haber varias trazas en ejecución al mismo tiempo, primero tenemos que buscar la que deseamos. Para esto podemos usar la sentencia:
select * from fn_trace_getinfo(0)
Esta sentencia nos devuelve todos los ids de las trazas existentes. Busquen la que desean detener mirando los atributos de cada una (pueden buscar el nombre del archivo donde se guardan los logs por ejemplo). Una vez que obtenemos el id de la traza simplemente ejecutamos:
EXEC sp_trace_setstatus elID, 0
si queremos solamente detenerla, o bien:
EXEC sp_trace_setstatus elID, 0
EXEC sp_trace_setstatus elID, 2
si queremos detenerla y eliminarla del sistema.

Lo último que me queda por decir acerca de las trazas es que estas se detienen cada vez que reiniciamos el motor de base de datos y no se arrancan solas. Si queremos que nuestra traza se inicie cada vez que iniciamos el motor de base de datos, podemos meter todo el código anterior en un store procedure de la base de datos master:
USE [MASTER]
GO

CREATE PROCEDURE usp_trace
AS

... TODO EL CODIGO ANTERIOR ...
Una vez creado el store procedure, debemos configurarlo para que se ejecute al inicio. Para esto, necesitamos oooootro store procedure llamado sp_procoption. Por suerte esto SP es muy simple, debemos pasarle el nombre del SP que queremos ejecutar, un valor indicando lo que queremos hacer (en nuestro caso que se ejecute al inicio del sistema) y el valor de la opción (true para activarlo). Asumiento el nombre del store procedure que utilice en el ejemplo (usp_trace), deberíamos ejecutar lo siguiente:
EXEC sp_procoption ups_trace, StartUp, True


Cómo leemos los archivos .trc?

Para variar, nuestros amigos de MS nos entregan un formato propietario el cual no se puede abrir con otra cosa que no sea el SQL Profiler, osea, un programa provisto por ellos...
El SQL Profiler es bastante completo y permite realizar distintos niveles de filtrado para poder visualizar la información que nos interesa, pero igualmente preferiría un formato de archivo visible con cualquier editor, o desde una base de datos.

Cabe destacar que es posible volcar los valores del log a una base de datos para que sean más fáciles de administrar, aunque ahora no recuerdo exactamente en donde estaba explicado, si lo encuentro en estos días, actualizo el artículo =)

También es interesante saber que las trazas se pueden crear desde el SQL Profiler, desde una GUI bien bonita... aunque siempre es mejor hacerlo a mano y estar seguro de qué se está activando. Además el SQL Profiler incurre en un overhead extra en el sistema para ejecutar las trazas...


Referencias

El gran artículo que me ayudó muchísimo a entender todo este sistema de log de eventos fue Get Compliant with SQL Server 2005 Audit, muchas gracias Larry Clark por tan buen artículo.
Por supuesto que el resto lo tuve que hacer solo mirando los manuales de MS que pueden encontrar en SQL Server Profiler Stored Procedures (Transact-SQL).
F*ck! Hotmail no se cierra!
Pensé que con los años dejaría de ver este tipo de mails, pero los años pasan y sigo recibiendo este mail, una y otra vez, cambia un poco la descripción, cambia el supuesto director de hotmail, pero el mensaje final es siempre el mismo "Hotmail se cierra!"...
Para el que sea más nuevo en el tema, vengo recibiendo este mail desde que utilizo internet, osea, desde el 2001, y estoy seguro que data de tiempos anteriores al 2001.
Es increíble, pero la gente sigue creyendo en esta clase de e-mails, a pesar de que lo reciben una y otra vez... cada vez que lo reciben, lo vuelven a mandar!!! BASTA! Hotmail no se cierra!, como se pueden imaginar que algo así puede llegar a ocurrir! y mucho menos que M$ valla a reconocer que tiene problemas de almacenamiento, eso sería como decir "ok, no servimos para esto, nos damos por vencidos"... estamos hablando de M$!
Por otro lado, si están teniendo problemas de almacenamiento no van a alentar a sus usuarios a mandar tonelada de mails que ocupen más almacenamiento!, es totalmente contradictorio!
Además, si se cierra hotmail, qué? dejan de existir los mails? deja de existir el chat? no, no y NO! existen miles de webmails gratuitos, y existen muchos protocolos de chat para utilizar! Como reemplazo perfecto podríamos utilizar Yahoo!/Yahoo! Messenger o Gmail/Gtalk, siendo el servicio de mail de google mucho mejor que el de hotmail...

Ahora, aquel desconfiado que todavía no se convenza con mis palabras se podría preguntar, si no es real, para qué enviarían un mail así?... bueno, tienen muchos motivos.
Por un lado puede utilizarse como una forma de Dennial of Service, saturando la red de mails, intentando voltear el servicio de hotmail... aunque esto data más del pasado, no creo que actualmente sea este el fin... el problema es que estos mails del pasado quedaron vagando por la red por años y siempre hay alguien que los reenvía.
Por otro lado tenemos una forma perfecta para distribuir malware, si el mail se encuentra infectado con alguna vulnerabilidad del browser o de nuestro cliente de correo, estamos listos.
También se puede realizar phishing, pidiendo que visitemos alguna página para registrar alguna información adicional y así regalarle nuestro nombre de usuario y contraseña a un tercero.
Otra posibilidad es ganar algunas visitas en alguna página para sumar plata con alguna forma de adsense.
Hay muchas finalidades para hacer que un mail llegue a las masas, incluyendo una bien infantil, la cual es, simplemente molestar y ver cuantos ignorantes reenvían el mail...

En fin, espero que cuando alguien reciba alguno de estos mails, googlee un poco, encuentre este post y no lo reenvíe más!!! Estoy realmente re podrido de seguir recibiendo "hotmail se cierra!"... hagan correr la bola!
Survey servers más confiables
Ayer leí sobre un survey analizado en infoworld.com donde se comparan los tiempos "fuera de servicio" (downtime) de las distintas combinaciones de servidores.
Para el análisis se eligieron 15 de las combinaciones más populares de hardware y sistema operativo y se consultó a ejecutivos con conocimientos y administradores IT de 400 organizaciones apostadas en 20 países sobre tiempo fuera de servicio no planeado, parcheo (patching), y otros indicadores de confiabilidad.
Si bien no se que tan influenciado puede estar el survey (léase $$$), los resultados obtenidos dan como vencedor a IBM y su SO AIX Unix que en promedio sufre de tan solo 15 minutos de downtime por año. El segundo puesto como servidor más confiable se lo lleva la versión de Novell Suse Linux customizada corriendo en hardware x86 estándar, con un promedio de 17.4 minutos de downtime por año. Sin embargo la version de Suse no customizada promedia los 54mins.
Otras distribuciones de Linux como TurboLinux y Mandriva sobre hard x86 estándar promediaron 31.8 minutos de downtime/año, mientras que Sun Solaris sobre servidores Sparc sufrieron de 35.4 mins.
Por otro lado, servidores HP 9000 corriendo el SO HP Unix aparece en 5to lugar con 36mins/año. En sexto aparecen los servidores Apple G4 Mac corriendo Mac OS X con 37.8 mins/año.
Por supuesto los servidores Windows corriendo sobre hard intel están bien abajo, donde Windows 2003 server tuvo 3 horas y media por año y Windows 2008 server cerca de 2 horas y media por año.
Muy a mi pesar, distribuciones libres como debian aparecen etre los peores casos con más de 4horas de downtime por año.
Por su parte, servidores basados en Ubuntu la safaron bastante bien con 1 hora 40 mins de downtime por año, aunque empeoró bastante su rendimiento en comparación del año pasado donde sólo promedió 1 hora de downtime.

Para resumir, y porque me encantan los rankings, les dejo la lista armada amablemente por su servidor según los datos leídos.
1. IBM AIX Unix - 15 mins/año
2. Novell Suse Linux sobre x86 - 17.4 mins/año
3. TurboLinux, Madriva (posiblemente otras) sobre x86 - 31.8 mins/año
4. Sun Solaris sobre Sparc - 35.4 mins/año
5. HP's Unix sobre HP 9000 - 36 mins/año
6. MacOS X sobre Apple G4 Mac - 37.8 mins/año
más abajo. Ubuntu - 1.30 hs/año
lejos 1. Windows 2008 server sobre Intel - 2.3 hs/año
lejos 2. Windows 2003 server sobre Intel - 3 hs/año
lejos 3. distros libres (como debian) - más de 4 hs/año

Como nota final, cabe aclarar que en el survey sólo se incluyeron enterprise servers y no mainframes, los cuales seguramente estarían primeros. El motivo (según el analista) es que los mainframes son una clase propia, ellos no suelen tener downtime.
news: HTML 5 no hay acuerdo, agujero en ActiveX, iPhone hackeado
Y si bien la semana pasada nos alegrábamos por la incorporación de HTML 5 en Firefox 3.5, hace varios días vengo leyendo que los desarrolladores de los distintos browsers todavía no se han puesto de acuerdo sobre cuáles deben ser los codecs a utilizar para la reproducción multimedia. Si bien Mozilla y Opera han optado por Ogg Theora, Apple y Google favorecen a H.264/MPEG-4 AVC. Dado que Google soportará ambos codecs, sólo Apple sería el que no soporte Ogg Theora. Por su parte Microsoft no ha anunciado ninguna intención de soportar HTML 5...
Como siempre, la estandarización en cuanto a la web sigue siendo complicada y los fabricantes no se ponen de acuerdo. Espero que esto cambie porque los que terminan sufriendo el problema son los desarrolladores de aplicaciones web...

-----------------------------
Cambiando de tema, hoy encontré un advisory que publicó MS ayer sobre una vulnerabilidad en un control ActiveX de Microsoft Video que ya está siendo explotada, pero para la cual aún no existe parche. Si todavía sos tan kamikaze como para seguir utilizando Internet Explorer en lugar de un browser de verdad, te aconsejo que leas y apliques lo dicho en la página de MS. Como no hay parche disponible, lo único que se puede hacer es desactivar dicho control (el cual al parecer no sirve para nada más que ser atacable).

-----------------------------
La última de las noticias de este post se refiere a algo que leí hace unos días. Según distintas páginas, Apple está trabajando para arreglar una vulnerabilidad, reportada de forma privada, que podría permitir a un atacante instalar y ejecutar remótamente software no firmado con permisos de root.
El ataque en cuestión utiliza una debilidad en el manejo de mensajes de texto recibidos por SMS... siiii te hackean por SMS!!! re groso!!!
Si vivis en un país en el que el iPhone es comprable, o si tenes el suficiente dinero para mostrarles a los demás que tenes un teléfono mejor que la porquería del usuario promedio, seguro te interesará leer más en infoworld, f-secure, o slashdot.
Software Wars
Hace un tiempo me topé con este genial gráfico que ilustra el estado de competencia entre los distintos programas, agrupados por empresas, como un mapa de guerra. La fuente original es http://mshiltonj.com/software_wars/
Cabe destacar que el mapa se creó utilizando sólo herramientas de software libre (Inkscape y GIMP).
Es una pena que no se actualice desde el 2006 porque la verdad que está muy bueno.
Bing, el más certero de los buscadores!
El otro día una amiga recibió un interesante e-mail. Un amigo de ella hizo una búsqueda en el flamante Bing y no obtuvo lo que esperaba, aunque si obtuvo lo que todos sabemos =P
Juro que es verdad, al menos al día de hoy (15/06/09) consultando desde Argentina, los resultados siguen siendo los que muestro a continuación, compruebenlo ustedes mismos.

Si por ejemplo, buscamos la palabra "ladrones" en Bing, obtenemos lo siguiente:

Ahora, si buscamos la palabra "chorros", podemos ver algo como esto:

Mala suerte para el gobierno y para Arnet, parece que la gente de Microsoft no tiene pelos en la lengua a la hora de expresar sus opiniones =P


NOTA: que bien que anda Bing!, menos mal que sigue existiendo google...
Cloud Computing: dónde mierd* están mis datos???
Un término que viene pegando fuerte en la red es el de cloud computing. Hace tiempo vengo viendo comentarios sobre esta nueva forma de servicio, y últimamente veo como más empresas se van sumando al tren.

Qué es?
Cloud computing básicamete es un sistema de servicios distribuidos que brinda recursos (de forma gratuita o paga) a los usuarios/empresas para que utilicen sin preocuparse por tener que administrarlos. Estos recursos estarán siempre disponibles y se podrán acceder desde cualquier lugar del planeta. El recurso puede ser cualquier cosa, tiempo de procesamiento, espacio en disco, una aplicación, un archivo, incluso hasta un sistema operativo... Cada proveedor tiene su propio servicio y puede estar basado en uno o más recursos.
Aquel que no conozca del tema, seguramente se estará preguntando por qué el nombre Cloud Computing (Computación en Nube - beugh que feo suena en español :S). El nombre (excelentemente elegido) se refiere a que uno utiliza recursos que no sabe donde están ubicados físicamente, ni cómo se administran, forman parte de una nube. El usuario utiliza los recursos sin preocuparse de nada, sólo sabe que están siempre disponibles y que los puede acceder desde cualquier lugar.

Una definición que me encantó fue la que leí en ruby.about.com donde citan lo que dijo George Reese, CTO de enStratus Networks y autor del libro Cloud Application Architectures (O'Reilly Press): "In the end, what the cloud really amounts to is: it's not my problem." algo así como "Al final, cloud realmente se resume a: no es mi problema". A lo que se refiere Reese es que uno utiliza los recursos y si algo sucede es problema del proveedor, nosotros nos abstraemos de lo que sucede por debajo, nos limitamos a usar el recurso.

En realidad lo único nuevo detrás de Cloud Computing es el nombre y el marketing. Desde hace años venimos utilizando servicios que caerían dentro de la definición de Cloud. Tal vez el que resulte más familiar es el de e-mails. Este servicio, brindado gratuitamente por diferentes compañías nos brindan espacio para almacenar los e-mails, así como también el procesamiento para enviar y recibir e-mails, y todo sin que nosotros sepamos como funciona ni dónde se almacenan. Además los e-mails son accesibles desde cualquier lugar del mundo y están siempre disponible. Como ven, es un servicio cloud.
Igualmente sucede con los motores de búsqueda. Los motores de búsqueda tienen almacenados gigantes índices y grandes cantidades de páginas y realizan todo el procesamiento necesario para que nosotros obtengamos los resultados, todo sin que sepamos cómo o dónde están los recursos necesarios para que esto funcione. También están siempre disponibles desde cualquier lugar.


División general
El concepto de cloud se puede dividir principalmente en Infrastructure as a Service (IaaS), Platform as a Service (PaaS) y Software as a Service (SaaS), aunque hay otros no tan conocidos.

IaaS nos entrega una infraestructura completa como servicio. La idea es que en vez de comprar servidores, software, espacio de almacenamiento o equipamiento de red, el cliente compra todos los recursos en un pack totalmente administrado por el proveedor, el cual nos garantiza disponibilidad en todo momento, así como buena performance y seguridad. Un par de links interesantes son http://en.wikipedia.org/wiki/Infrastructure_as_a_service y http://www.gni.com/services/iaas (es interesante leer en la página de GNi que entre sus clientes se encuentran IBM y Cisco!)

PaaS permite a los usuarios utilizar servicios de sistema operativo. Si bien el concepto es así de general, lo que las empresas brindan se orienta al desarrollo de software. El servicio provisto incluye las facilidades requeridas para el completo ciclo de vida de desarrollar, testear y hostear aplicaciones web, sin necesidad de descargar o instalar software para los desarrolladores, administradores IT o usuarios finales. PaaS también se conoce como cloudware. Algunos links donde encontrar info sobre PaaS son, como siempre, el wiki http://en.wikipedia.org/wiki/Platform_as_a_service , y además http://www.platformasaservice.com/ y http://blogs.bungeeconnect.com/2008/02/18/defining-platform-as-a-service-or-paas/

Por último y tal vez el que resulte más familiar al usuario es SaaS. SaaS nos brinda la facilidad de utilizar aplicaciones y guardar los datos utilizados en esas aplicaciones en la nube, con lo cual podemos acceder y editar nuestros datos cuando queramos, desde donde queramos, además de trabajar en grupo con los usuarios que queramos. El usuario no necesita ningún software o hardware adicional para usar/modificar o acceder a sus datos. En ésta categoría caen los ejemplos que cité más arriba (motores de búsqueda e e-mails) así como también las conocidas google applications (google docs, calendar, reader, etc) y otras tantas.

Cada una de éstas formas de servicio es bastante compleja y merecerían un informe completo cada una, aquí sólo incluí una definición muy básica. Hay empresas que brindan uno u otro servicio, así como también algunas que brindan más de uno.


En resumidas cuentas, Cloud Computing ofrece:
Además de la posibilidad de utilizar los recursos en todo momento desde cualquier lugar del planeta, sin preocuparnos de cómo se mantienen o dónde están, colaborar entre usuarios repartidos por todos lados, hay otros beneficios no tan visibles para el usuario final, pero sí para las empresas. Por un lado está la posibilidad de crecimiento a un bajo costo. De no existir IaaS algunas empresas no podrían escalar debido a los altos costos de comprar y mantener servidores, espacio, equipamientos de red, seguridad, monitoreo, etc. Por otro lado tenemos las facilidades de PaaS para el desarrollo de software de forma distribuida, donde las empresas pueden focalizarse sólo en desarrollar, dejando el resto del trabajo al proveedor Cloud (es decir, abstracción). También es importante la alta disponibilidad y la confiabilidad, la idea de un servicio Cloud es estar siempre disponible y nunca perder un dato. Por supuesto (aunque con un interesante enganche que explico más abajo) está el tema seguridad, garantizando integridad y cuidado de nuestros datos. Vale mencionar que existen otros beneficios, como escalabilidad, flexibilidad, etc.


Empresas en el ruedo
La empresa con mayor peso en prestaciones de servicios Cloud es Amazon (pensar q arrancaron vendiendo libros...), con su Amazon Web Services.
Por otro lado, tenemos el más conocido (por usuarios internautas comunes) Google Apps con sus ya afamados Google Docs, Talk, Calendar, etc.
También Salesforce.com es conocido por su CRM (Customer Relationship Management)
Por supuesto que Microsoft no se iba a quedar fuera del juego, ellos ofrecen Microsoft Online Services , los cuales, para variar, son pagos. (bueno, los de Amazon y Salesforce también son pagos, pero uno trae la inercia de tirarle palos a M$ =D ).
Por su parte IBM ofrece Blue Cloud con una variada lista de servicios.
Existen muchas otras compañías ofreciendo distintos servicios (como la citada GNi), sólo hace falta buscar lo que deseamos.


To be or not to be
Y como no podía ser de otra manera, después de describir Cloud Computing y sus beneficios, hace falta una buena reflexión de las implicaciones. Como cité en la anteriormente, hay un interesante enganche concerniente a la seguridad.
Si bien la idea de Cloud es excelente, qué pasa con nuestros datos?, qué pasa con las estrategias empresariales?, qué pasa con la privacidad?... como el resto de las cosas en este servicio, están en las nubes. Debemos confiar execivamente en nuestros proveedores. Y si por ejemplo nuestros proveedores decidieran cortarnos el servicio y quedarse con nuestros datos hasta que paguemos una elevada suma de dinero?, y si vendieran nuestras estrategias de negocio a la competencia? Qué seguridad tengo de que no explote todo y pierda mi negocio?. Como bien cito en el título, dónde mierd* están mis datos? qué hacen con ellos?
También está el problema político. Y si almacenan los datos en un país dónde el gobierno pueda decidir sobre el futuro de mi empresa?

En http://www.idg.es/Comunicaciones/articulo.asp?id=191003 hacen un interesante review de Cloud Computing con una buena lista de los riesgos a los que estamos expuestos.
Por supuesto, el defensor de la libertad absoluta (y hasta extremista) Richard Stallman remarcó de forma dura, pero realista lo que potencialmente puede pasar al dejar tanta responsabilidad en manos ajenas. Algunos de sus comentarios pueden leerse en http://www.guardian.co.uk/technology/2008/sep/29/cloud.computing.richard.stallman

También en http://www.infoworld.com/d/cloud-computing/how-buy-cloud-computing-services-821 hacen un buen trabajo remarcando los problemas que deben afrontar las empresas que deseen utilizar los servicios del Cloud Computing para sus negocios.


Agradecimiento:
Antes de terminar, quiero agradecer especialmente al Sensei Echaiz no sólo por prestarme una excelente fotografía para colocar en el informe, sino por todo lo que me enseñó y me sigue enseñando cada día, sin su ayuda mi trabajo no sería lo que es. Gracias Javi!
Pueden ver más de su excelente trabajo fotográfico en su blog


----------------------------------------------------------------
Cómo ven diferentes personajes al Cloud Computing:

Usuario guay: es de lo mejor!, puedo tener todo en cualquier lado en cualquier momento, nada de andar con pen drives molestos!

Fox Molder: es un nueva conspiración del gobierno (en conjunto con los Aliens) para controlar a los ciudadanos, big brother te vigila!

Steve Ballmer: money!, monopoly!, money!... i forgot something?, oh yeah, buy Windows!

Richard Stallman: es una estupidez!, es peor que estupidez: es una campaña de marketing publicitario!

JE: una nueva forma de vender mi alma al diablo.
News: Microsoft pre-lanza "Bing" y Google prepara "Wave"
Mientras busco tiempo para terminar un mini informe sobre Cloud Computing, inauguro la sección news con las noticias más relevantes que he leído en los últimos días.

Para comenzar y como lo más relevante del día, es que ya está entre nosotros la nueva lavada de cara de Microsoft al mundo de los buscadores. Después de fracasar rotundamente con su Live Search (el cual era pésimo, vale remarcar) ahora se lanzan al mercado con un renovado buscador al que nombraron Bing (también conocido como Kumo). Como todo lo lanzado por Microsoft, ellos propagandean Bing como el buscador más rápido y el que toma mejores decisiones. Como siempre, no confío para nada en las soluciones M$, pero al menos demosle el beneficio de la duda y probemoslo un poco: http://bing.com Esperemos que no se queden sólo en el "bla, bla" y hagan un verdadero esfuerzo por innovar.
Noticias relacionadas al respecto son http://tech.slashdot.org/story/09/05/28/1650226/Microsoft-Rebrands-Live-Search-As-Bing y http://tech.slashdot.org/story/09/06/01/1718241/Microsoft-Bing-Search-Launches-Early-Preview

Por otro lado, encontré interesante la noticia sobre un nuevo desarrollo googlesco: Wave. Wave es un sistema basado en p2p orientado a conversación (al mejor estilo IMs) y colaboración. La idea es que cada usuario cree su wave y agregue personas, entre las cuales se puedan comunicar utilizando texto enriquecido, fotos, gadgets y hasta feeds. La idea es combinar Gmail y Google Docs. Pueden leer más información, así como un video explicativo en http://googlesystem.blogspot.com/2009/05/google-wave.html
Veremos que sale de esta nueva apuesta, yo lo veo como un sistema que quiere abarcar todo lo visto para redes sociales.