martes, abril 29, 2008

Windows XP SP3

Ya está disponible el Service Pack 3 para Microsoft Windows XP - que por cierto, parece ser que va a dejar de venderse en junio -. Como siempre es interesante leerse las notas de la versión y Service Pack 3 Overview. En este último documento puede verse las novedades que tiene el Windows SP3 (son las mismas que las de la última Release Candidate). Ahora mismo no está publicado en la zona de download de Microosft aunque en esta anotación de OSNews dan el enlace directo a la bajada del SP3 (en inglés supongo). Según Update: Microsoft Delays Windows XP SP3 de PC Magazine, la publicación del Service Pack se ha visto retrasada debido a un fallo de compatibilidad Microsoft Dynamics Retail Management System (RMS). (también puede verse en Last-Minute Glitch Holds Up Windows XP SP3 en Slashdot.

Technorati Tags:

Generación automática de exploits aprovechando los parches

Mig21 ha publicado una interesante entrada Generación automática de exploits aprovechando los parches, se trata de obtener información de los parches binarios publicados por los fabricantes comparando el fichero corregido con el fichero original. Puede encontrarse información en Automatic Patch-Based Exploit Generation is Possible: Techniques and Implications y en los comentarios de Barrapunto. Hace algún tiempo leí algo sobre el tema, y leyendo sobre el tema se puede ver eEye Binary Diffing Suite (EBDS) o bindiff, un módulo para IDA Pro. Se puede encontrar más información en las publicaciones de la empresa autora de Bindiff, y un poco más en este artículo de SecurityFocus.

Technorati Tags: ,

Regulando el tráfico P2P con ayuda de Linux

A veces es necesario identificar tráfico de redes P2P con ayuda de Linux, y poder regular el tráfico de manera adecuada.Existen dos proyectos que pueden ayudar a realizar esta clasificación del tráfico. Anoto un par de referencias de dos proyectos de fuentes abiertas capaces de identificar est tipo de tráfico. El primero de ellos es Application Layer Packet Classifier for Linux, que utiliza la infraestructura Netfilter, y que inspecciona el contenido de los paquetes de datos para averiguar el protocolo que está usando. La lista de protocolos que es capaz de detectar es bastante extensa, en especial aquellos usados por las redes P2P. Otro paquete de software que es capaz de identificar tráfico P2P es IPP2P. Este proyecto se diferencia del anterior en que está pensando para detectar tráfico P2P.Si se consulta las instrucciones de uso, podemos ver los protocolos que son capaces de manejar.

Technorati Tags: ,

domingo, abril 27, 2008

Curva de Koch

Llevo un tiempo releyendo un libro de fractales que compré hace más de 10 años, Geometría fractal, Algorítmica y representación, de Javier Barrallo Calonge, donde se da una breve introducción a diversos conjuntos fractales. En vez de usar C, he decidido probar alguno de los algoritmos que explican en el libro usando Python, en especial porque tiene un módulo, turtle que permite realizar sin ninguna dificultad gráficos de tortuga. De esta manera puedo tener código que se ejecuta en cualquier sistema que tenga el interprete Python, eso si, al menos la versión 2.4 del mismo. Aunque pierda algo de velocidad, es mucho más fácil de ver los resultados.

Curva de Koch

El primer fractal con el que he estado intentando es la curva de Koch. Esta curva se generar tomando un segmento de recta, dividiéndola en tres trozos, y sustituyendo el segmento central por otros dos segmentos rotado el primero 60º respecto al primero y el segundo 120º respecto al primero. Este proceso se repite de manera recursiva, hasta la profundidad que deseemos. El código python que genera la curva es el siguiente:
#!/usr/bin/python

import turtle

def genera_koch(level,l):
        if level==0:
                turtle.forward(l)
        else:
                genera_koch(level-1,l/3)
                turtle.left(60)
                genera_koch(level-1,l/3)
                turtle.left(-120)
                genera_koch(level-1,l/3)
                turtle.left(60)
                genera_koch(level-1,l/3)
turtle.setup(width=800,height=600,startx=400,starty=300)
turtle.up()
turtle.backward(125)
turtle.down()
turtle.degrees()
turtle.tracer(0)
genera_koch(5,250)
raw_input()
El programa anterior nos genera la siguiente figura:

Curva de Koch

El copo de nieve

Para generar el copo de nieve, lo que se debe hacer es partir de un triángulo equilátero, donde sustituimos cada uno de los lados del mismo con una curva de Koch. El código es el siguiente:
#!/usr/bin/python

import turtle

def genera_koch(level,l):
        if level==0:
                turtle.forward(l)
        else:
                genera_koch(level-1,l/3)
                turtle.left(60)
                genera_koch(level-1,l/3)
                turtle.left(-120)
                genera_koch(level-1,l/3)
                turtle.left(60)
                genera_koch(level-1,l/3)




turtle.setup(width=800,height=600,startx=400,starty=300)
turtle.up()
turtle.degrees()
turtle.tracer(0)
turtle.goto(-100,200)
turtle.down()
for i in range(0,3):
        genera_koch(4,250)
        turtle.right(120)
raw_input()
Este código genera el siguient gráfico: Copo de Nieve

Referencias

sábado, abril 26, 2008

Interfaz FastCGI en Web Servers

Leyendo un poco sobre el uso de PHP sobre Internet Information Server he encontrado información sobre Fast CGI, una modificación de la tradicional interfaz de ejecución de procesos CGI. CGI es la interfaz que define como un servidor web se comunique con un programa externo para obtener datos que posteriormente mandará el servidor web al cliente. Esta interfaz está bien, cuando no se tiene mucha carga. Sin embargo existe problemas de escalado cuando el número de peticiones sube: la creación de un proceso por cada petición para atenderla es un proceso costoso y no se puede reutilizar recursos comunes - por ejemplo, conexiones a base de datos -

Para superar estas limitaciones surgieron una serie API - interfaces de programación - ligadas a distintos servidores web que permitían introducir módulos con código propio en el servidor web. Por ejemplo, NSAPI para el servidor http de Netscape, ISAPI para el servidor IIS de Microsoft o la programación de módulos de Apache. De esta manera se integra la funcionalidad que se desee en el propio servidor web, remediando los principales defectos que tenía el uso de la interfaz CGI para ejecutar programas externos. Eso si, a cambio, es mucho más difícil aislar diferentes aplicaciones que se ejecutan en el mismo servidor web, y siendo mucho más complicado establecer quotas de uso de recursos.

Hace bastante tiempo surgió otro modelo de programación que es fastcgi, con la idea de juntar lo mejor de ambos mundos:

  • Rendimiento: Al no estar creando un proceso por cada petición, se ahorra los problemas de rendimiento de la interfaz antigua de CGI.
  • Simplicidad: Es muy fácil migrar los programas CGI escritos.
  • Independencia del lenguaje usado para programar el CGI.
  • Aislamiento de procesos: Una aplicación que utilice esta interfaz no puede corromper a otras.
  • Independencia del servidor: La especificación no está atada a ninguna arquitectura de servidor.
  • Soporte para aplicaciones distribuidas: permite distribuir carga entre máquinas remotas.

Esta manera de ejecutar aplicaciones es similar a la usada en los servidores de aplicaciones Java, donde hay un sistema que recibe las peticiones y sirve los ficheros estáticos y una serie de servidores de aplicaciones que reciben las peticiones vía un módulo (por ejemplo, en el caso de Apache, el mod_jk).

He encontrado esta interfaz para la ejecución de procesos leyendo sobre la implementación de php sobre IIS, que ha sido certificada por Zend para la ejecución en Windows 2008 (básicamente la versión basada en CGI tenía problemas de rendimiento mientras que la basada en ISAPI tenía problemas de estabilidad).

Instalando FastCGI en Apache

Instalar el módulo FastCGI en Apache es muy sencillo, en este caso como un módulo DSO:
  1. Bajarse las fuentes del FastCGI
  2. Descomprimir las fuentes y entrar en el directorio:
    tar zxvf mod_fastcgi-2.4.6.tar.gz
    cd mod_fastcgi-2.4.6
  3. Generar el módulo del Apache con apxs e instalarlo (como un usuario administrador):
    apxs -o mod_fastcgi.so -c *.c
    apxs -i -a -n fastcgi mod_fastcgi.so
  4. Comprobar que se han añadido al fichero de configuración la entrada necesaria para que el sistema cargue el módulo fastcgi. Debe de aparecer una línea de este tipo:
    ...
    LoadModule fastcgi_module ruta/mod_fastcgi.so
    ...

Referencias

Technorati Tags: ,

martes, abril 22, 2008

Usar vbscript para obtener información del directorio activo en Windows

Me he encontrado estos dos últimos días con un par de problemas de administración de máquinas situadas en un directorio activo. Los problemas que tenía que solucionar eran dos:
  • Obtener el dn (distinguised-named) que identifica a una máquina determinada dentro del directorio activo.
  • Obtener la raíz del directorio LDAP.
  • Poder hacer consultas directas al directorio activo usando LDAP y filtrando el contenido que interese.

Información básica de un usuario y máquina

Lo malo de trabajar en entornos de Microsoft, es que a veces, hay varias maneras de realizar lo misma operación, muchas veces, a través API distintas. Para realizar la primera operación recurro a ADSI y concretamente a la interfaz IADsADSystemInfo. Gracias a ella somos capaces de obtener una serie de información básica sobre el ordenador y el usuario que está actualmente conectado. Del ejemplo de Microsoft:
Set objSysInfo = CreateObject("ADSystemInfo")
Wscript.Echo "Usuario: " & objSysInfo.UserName
Wscript.Echo "Nombre de máquina: " & objSysInfo.ComputerName
Wscript.Echo "Sitio: " & objSysInfo.SiteName
Wscript.Echo "Nombre de dominio corto: " & objSysInfo.DomainShortName
Wscript.Echo "Nombre de DNS: " & objSysInfo.DomainDNSName
Wscript.Echo "Nombre de DNS del árbol: " & objSysInfo.ForestDNSName
Wscript.Echo "Máquina con el rol de PDC: " & objSysInfo.PDCRoleOwner
Wscript.Echo "Máquina con el rol de schema owner: " & objSysInfo.SchemaRoleOwner
Wscript.Echo "¿Está en modo nativo?: " & objSysInfo.IsNativeMode
set objSysInfo = nothing

La información más útil es concer los dn del usuario y nombre máquina, para poder usarlos en otras operaciones de ADSI (por ejemplo las contraseñas, averiguar cual es la unidad organizativa a la cual pertenece la máquina o el usuario)
Para que esta interfaz pueda funcionar correctamente, el usuario que ejecuta dicho script, debe de tener permisos de consulta en el directorio activo.

La raíz del directorio LDAP

En LDAP, rootDSE es la raíz del directorio y tiene una serie de información sobre el servidor de directorio. Entre otra información tenemos el distinguished name (dn) para el dominio del cual el servidor de directorio es miembro, y esta información es útil para realizar consultas al LDAP. Obtenerla es muy sencillo:
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("DefaultNamingContext")
Si seguimos la documentación de los enlaces puede obtenerse de este contexto mucha más información como puede ser el tipo de controlador de dominio, el modo en el que se encuentra, el tiempo actual que tiene el controlador, si el controlador está sincronizado,...

Consultas LDAP

A la hora de realizar una query LDAP la herramienta más adecuada en Microsoft Windows es Microsoft ActiveX Data Objects, usando el proveedor de Microsoft OLE DB Provider for Microsoft Active Directory Service, permite realizar consultas al LDAP que implementa el directorio activo.
El lenguaje de consultas que permite este proveedor ADO puede ser bien un dialecto de SQL o bien un filtro LDAP:
Fitro LDAP
"<LDAP://DC=ArcadiaBay,DC=COM>;(objectClass=*);sn, givenName; subtree"
Filtro SQL
"SELECT title, telephoneNumber From 'LDAP://DC=Microsoft, DC=COM' WHERE objectClass='user' AND objectCategory='Person'"
Para crear una consulta contra el directorio activo, lo que hacemos es crear un objeto ADODB.Connection, que usará como proveedor ADsDSOObject, que es el proveedor para ADO que conecta con el directorio activo. Luego, crearemos un objeto ADODB.Command al cual asignaremos la conexión que hemos creado, estableceremos la consulta que deseemos, y la ejecutaremos, lo que nos devolverá un objeto ADODB.RecordSet que nos permitirá iterar por las distintas filas de datos que haya generado la consulta.
Para ver las cosas un poco más claras, un ejemplo que nos va a devolver todas las cuentas de máquinas que existan en el dominio de directorio activo al cual está conectado la máquina:
' Obtener cual es el dominio Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("DefaultNamingContext")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
strCmdText =<"<LDAP://"&strDomain&">" _
+";(&(objectCategory=Computer)(objectClass=Computer));ADsPath,name,cn;Subtree"
'WScript.Echo strCmdText
objCommand.CommandText = strCmdText
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    WScript.Echo objRecordSet.Fields("name").Value
    objRecordSet.MoveNext
Loop
El script anterior listaría todos las máquinas presentes en el directorio activo. La parte más interesante es la consulta que ejecuta el proveedor para obtener la información. Esta consulta tiene la forma:
Base de la búsqueda<LDAP://dc=dominio,dc=com>
Filtro LDAP(&(objectCategory=Computer)(objectClass=Computer)
Campos a devolverADsPath,name,cn
Ámbito de búsquedasubtree
En este ejemplo busqueramos desde dc=dominio,dc=com todos los objetos de la categoría computer y de la clase computer, devuelve los campos AdsPath,name y cn. El alcance de la consulta es subtree, busca en la rama donde está el objeto al cual no hemos conectados y recorremos todo el árbol de información hacia abajo.
Una cosa importante en el caso del directorio activo es tener en cuenta que por defecto, el AD está configurado para que devuelva como mucho 1000 objetos (ver el artículo KB 315071, concretamente el parámetro MaxPageSize).

Utilidad

Pues todo esto lo he tenido que buscar para ejecutar ciertas operaciones en función la unidad organizativa esté situada una máquina en el directorio activo, dado las condiciones de contorno del problema - hay una solución un poco más fácil a través d GPO, pero otros ejempos que se me ocurren son:
  • Modificar propiedades de un conjunto de usuarios o máquinas.
  • Ver desde cuando no utilizan la cuenta algunos usuarios.

¿Qué faltaría?

Referencias

lunes, abril 21, 2008

OpenBSD gana soporte de WPA/WPA2

(vía reddit.programming) acabo de leer que OpenBSD gana el soporte de WPA/WPA2. Aunque lo hace después de bastante tiempo respecto a muchos otros sistemas. El motivo es sencillo: los desarrolladores de OpenBSD siempre han pensado que pueden realizar el mismo tipo de soporte de criptografía fuerte en una red wireless usando IPSec. Sin embargo, esto ha dejado OpenBSD fuera de poder usarse para aprender en casa (no conozco a casi ningún router WIFI que soporte IPSec de serie).

Y es una lástima porque el equipo de OpenBSD ha hecho una serie de programas que merece muchísimo la pena y que son ampliamente usados dentro de la comunidad Unix como es el OpenSSH o los daemons de OpenBGPD

El anonimato de los militares españoles en el acceso a Internet

Acabo de leer en el blog de Elentir una de esas noticia que es más propia que de una república bananera, que de España (aunque conforme más pasa el tiempo, más pienso que nos parecemos). Me voy a tomar la noticia con un poco de cautela, pero Elentir apunta a La orden de investigar a los anónimos militares ‘blogueros’ se ha plasmado en una directiva a la Guardia Civil que recaba información. Que el tema de la web y los blogs supone una brecha del control tradicional de los medios de comunicación que siempre han intentando imponer todos los gobiernos españoles de los últimos 30 años es un hecho. Pero lo último que me podía imaginar es que la ministra de turno pusiera a trabajar a la Unidad de Delitos Informático de la Guardia Civil a intentar averiguar las direcciones IP de militares que hablan en foros de manera anónima. Hasta donde llega mi conocimiento, no se puede pedir direcciones IP de acceso a un determinado operador sin una orden judicial por medio (por eso me tomo la noticia con cautela), pero aunque supongo que los militares están informados, no estaría mal recordar la existencia de programas como Tor o FreeNet.

Technorati Tags:

jueves, abril 17, 2008

El administrador local y las políticas de seguridad de Windows (GPO)

Aunque hace bastante tiempo que lo leí, últimamente he necesido aplicar lo que comentaba Mark Russinovich en Circumbenting Group Policy Settings. Las políticas de seguridad en Windows afectan a dos entornos.

Por un lado al usuario, y dicha información se guarda bajo la rama de registro HKCU\Software\Microsoft\CurrentVersion\Policies. Dicha rama se almacena en el fichero ntuser.dat que está situado en el directorio home de la cuenta de Windows. Este fichero es propiedad del usuario, y las ramas de registro que se cargan de él también. Eso significa que cualquiera puede establacer permisos sobre las ramas que les interese y evitar que se aplique una política de seguridad (por ejemplo, que no podamos modificar los propiedades de conexión del Internet Explorer). Las políticas se aplican con el usuario SYSTEM: si bloqueamos el acceso del registro de escritura a dicho usuario, borrando las entradas que existan.

Pero sin embargo esta misma técnica, evidentemente, no puede aplicarse a las políticas de dominio que se despliegan para la máquina. Pero se da el caso, que, hay gente que tiene este tipo de permisos en las empresas (desarrollos, pruebas, etc). Una vez que tienes el administrador local en Windows, realmente da igual lo que te desplieguen por políticas, porque puedes bloquear el despliegue de las mismas retirando de nuevo los permisos en las ramas adecuedas, en el caso de las políticas de máquina HKLM\Software\Microsoft\CurrentVersion\Policies, quiando los permisos a la misma bloquaremos todo lo que nos venga del dominio.

¿Para qué puede ser útil este tipo de técnicas?. Pues básicamente cuando estamos en una red de dominio y se quieren probar algunas configuraciones que implementamos a través de la política de grupo local (local group policy), puesto qu es ta política es la primera que se aplica siempre cuando se arranca una máquina y lo que se establezca en ella es sobreescrito por la política de dominio. De esta manera podemos usar la consola de gestión de políticas locales gpedit.msc para poder configurar como se desee la máquina.

Como es lógico, es totalmente absurdo dar permisos de administrador local y luego utilizar las GPO como medida de seguridad.

Al aplicar esta técnica nos encontraremos en el registro eventos con origen Userenv e identificador 1020, que indica aquellas claves de registro que el proceso de encargado de aplicar las políticas en Windows (realmente lo que ocurre es que escribe una serie de claves en el registro y es luego el programa el encargado de configurarse en función de los valores de dichas claves).

Referencias

  • La lista de entradas de registro y a qué corresponde cada política puede encontrtarse en el documento Policy Settings

Securizando MacOS X

Leyendo mi blogroll, en Ars Technica acaban de publicar Mac users need to think about security, too un artículo donde se dan una serie de pautas básicas para securizar un sistema que ejecuta MacOS X. Alguno de los consejos que dan en el artículo son los siguientes:
  • Protege el acceso al OpenFirmware o EFI a través de una contraseña.
  • Usar contraseñas en los salvapantallas.
  • Usar listas de accesos sobre el sistema de ficheros (ACLs) - por defecto sólo activadas en la versión server -.
  • Usar FileVault para proteger datos importantes - encriptación del sistema -, aunque ojo, si se pierde la clave, se pierden los datos.
  • Configurar el firewall de manera adecuada.
  • No usar un usuario con privilegios de administrador para el trabajo diario
  • Mira los registros (logs) que ha generado las aplicaciones.
  • Usar un antivirus.
  • Mirar las conexiones salientes.
En los Macs que tengo normalmente lo que hago es utilizar siempre un usuario que no tenga permisos administrativos. En caso de necesitar desde el entorno gráfico acceder a un área que necesite permisos, el sistema preguntará por las credenciales para autorizar el acceso.

Como antivirus, no suelo usarlo por sistema, a menos que tenga que analizar alguna imagen, para lo cual suelo usar ClamXav, el port del antivirus de fuentes abiertas clamav. Un programa interesante que mencionan es, Litte Snitch que permite ver a donde se conectan los diversos daemons que están corriendo (para los más acostumbrados a la línea de comandos como yo, pueden usar lsof que viene incluido en el sistema.

Para los que necesiten tener su Mac fetén, pueden mirar las guías que ha publicado la NSA para protegerlos, tanto para la versión 10.3 Panther como 10.4 Tiger.

Por último, no estaría de más un poco más de velocidad a la hora de reconocer y corregir los fallos por parte de Apple, porque su tiempo de respuesta en cuestiones de seguridad no suele ser el mejor del mercado.

Referencias

miércoles, abril 16, 2008

¿Cuanto dura el CAPTCHA de Windows Live?

Acabo de leer que sistema de CAPTCHAS de Windows Live cae en menos de un minuto. Los diferentes bots que se encargan de mandar correo basura. Los spammers les encantan este tipo de cuentas (hotmail.com, livecom o gmail.com) porque las probabilidades de que estos dominios se encuentren en listas negras es bastante pequeña (recordar que hace poco cayó el sistema de CAPTCHAS de Google). Veremos como se toman las soluciones antispam este tipo de vulnerabilidades puesto, que un una brecha de seguridad en un sistema de este tipo puede hacer que un bot sea capaz de crear 1440 cuentas.

Technorati Tags: ,

Referencias de seguridad

Acabo de leer en la bitácora de fernand0 una referencia a Security Principles, un post de J.D Meier, donde se da una lista de principios a seguir a la hora del desarrollo de aplicaciones seguras, centrado sobre todo en plataforma web y con referencias a herramientas tecnológicas para implementar las medidas presentes en el entorno Windows.

La lista de consejos que da el autor del artículo es la siguiente:

  • Ejecutar los procesos con el mínimo privilegio posible.
  • Establecer controles de acceso entre las diferentes capas de la aplicación.
  • No confíes en lo que te manda el usuario.
  • Usa configuraciones por defecto seguras.
  • No confíes en la seguridad a través de la oscuridad.
  • Autoriza en la entrada y establece a qué puede acceder el usuario.
  • Asume que todo sistema externo es inseguro.
  • Reduce la información no necesaria que se muestra a los usuarios.
  • Si la aplicación falla elimina toda información sensible y no de a los usuarios información detallada del error.
  • La seguridad debe mantenerse en todas las capas de la aplicación: una cadena es tan segura como el más débil de sus eslabones.
  • Si no usas una funcionalidad, desactivala.
Como puede verse, esta lista de principios básicos es algo de sentido común, aunque muchas veces cosas como aplicar el principio de mínimo privilegio te causa una discusión con medio equipo de desarrollo, un jefe proyecto y un comercial que pasaba por allí (sobre todo porque en los proyectos Windows, me encontré un tiempo con cierta tendencia a desarrollar como administradores de las máquinas, y luego, pasaba lo que pasaba).

Google Apps Engine adaptado para ejecutarse fuera del entorno de Google y sobre Amazon EC2

(vía reddit.programming) Quien está probando el entorno de aplicaciones de Google Google App Engine siempre le puede pasar por la cabeza que estas atado a Google para la ejecución de los proyectos. Pues ya ha gente que se ha dedicado a portar todo el entorno para que pueda ejecutarse de manera independiente, como puede leerse en AppDrop. Pero es más, también han portado el SDK para que utilice los servicios de Amazon EC2 como sistema de backened. Puede leerse un poco más en Google App Engine ported to Amazon's EC2

Technorati Tags: ,

martes, abril 15, 2008

The Return of ADA (si es que alguna vez se fue en ciertos sitios ...)

(visto en reddit.programming) Acabo de leer The Return of ADA, un artículo donde hablan de algunos proyectos importantes que están usando ADA para su implementacion.

En primer lugar, el sistema Route Automation Modernization System, la actualización del sistema de control de tráfico aéreo de EEUU o London Area Control Center, el sistema de control de tráfico aéreo de la zona de Londres utilizan ADA para implementar sus funciones.

En el artículo hacen una breve entrevista a Robert Dewar uno de los los autores de GNAT, GNU Ada y da unas breves pinceladas como el uso de este lenguaje, que puede ser farragoso al principio, permite reducir posteriormente el tiempo de depuración y que lo implementado se ajuste a especificaciones (cosa especialmente importante cuando hablamos de sistemas de control de tráfico aéreo o de software que corren los sistemas empotrados de los aviones)

Technorati Tags:

lunes, abril 14, 2008

Limitaciones de Google Apps Engine

Acabo de leer google app engine limitations , un pequeño artículo de un empleado de Google , donde se habla de alguna de las limitaciones que presenta la plataforma de desarrollo de aplicaciones que ha presentado Google que se ha encontrado al desarrollar una aplicación.
  • Imposibilidad de ejecutar procesos en background. Todos los scripts se ejecutan cuando se accede a cierta URL. Aunque esto es una ventaja a la hora de la escalabilidad, hay aplicaciones reales que necesitan este tipo de procesos.
  • Al no existir conexiones permanentes no se puede usar la técnica de programación Comet, es decir, que el servidor mande de manera asíncrona datos al navegador.
  • Todo el tratamiento de datos se hace a través de scripts que hay que programar, en vez de algún tipo de frontend de base de datos. Hay que subir script para tratar los datos.
  • Lentitud al recorrer las tablas de datos.
  • Las operaciones de grandes cantidades de datos es lento.
  • No se puede hacer queries arbitrarias.
  • No tiene soporte para hacer peticiones https ni para recibirlas
  • .
También en Google App Engine: The good, the bad, and the ugly? aparecen reflejadas alguna de las limitaciones.

Actualización

Mientras leía otro artículo sobre el sistema he dado con las quotas del mismo que se resumen en:

Quotas fijas
QuotaLímite
Aplicaciones por desarrollador3
Almacenamiento por aplicación500MB
Límites de uso diario
QuotaLímite
Correos electrónicos por día2000
Ancho de banda de entrada10 Gigabytes
Ancho de banda de salida10 Gigabyttes
CPU Megaciclos200000000
Peticiones HTTP por día650000
LLamadas al API de base de datos2500000
Llamadas al API URLFetch160000

Technorati Tags:

domingo, abril 13, 2008

El firewall de Windows XP: Un pequeño tutorial

Windows, desde su versión XP siempre ha incluido un firewall que permitía controlar el tráfico que llegaba a las interfaces de red (aunque antes lo denominaban Internet Connection Firewall). Tras el desastre que ocasionaron varios virus, Microsoft decidió que el SP2 de Windows XP publicado en el 2004 que activaría por defecto el firewall en todas las interfaces, para evitar episiodios como el del Blaster o Sasser.

Para conectar el firewall en esas versiones de Windows anteriores al SP2 había que configurarlo a través de las propiedades avanzadas de la conexión de red, y como suele ser normal, no solían activarlo. Con el SP2 se presentó un nuevo componente del panel de control firewall.cpl a través del cual podemos acceder a configurar el firewall:

Configuración del Firewall de Windows XP

Desde la pestaña General, activamos o desactivamos el firewall de una manera sencilla. Por otro lado, se puede permitir las excepciones. Si se marca esta casilla, el firewall no permitirá las excepciones que se definan en la pestaña Excepciones, pero tampoco se permitirán las configuraciones establecidas en la pestaña Opciones avanzadas. Esto, que no aparece documentado por ninguna parte, me ha dado bastante dolores de cabezas al intentar activar el firewall sólo en determinadas interfaces sin excepciones.

Las excepciones del firewall de Windows

Se controlan a través de la pestaña Excepciones:

Configuración de Excepciones

Se pueden añadir dos tipos de excepciones: las de programa o las excepciones de puerto. En las primeras se añaden la ruta completa a un programa al cual se la autoriza a abrir puertos. El firewall deja pasar conexiones entrantes en función del ámbito que se le autorice la conexión. En el segundo tipo de excepciones se abre un puerto determinado, ya sea TCP o UDP y cualquier programa puede escuchar en esos puertos.

Con la primera opción es sencillo que cualquier programa abra un puerto de escucha según se desee. Esto puede ser útil en el caso de programas que usen puertos dinámicos. Un caso sencillo es un servidor ftp que utilice el modo pasivo para las conexiones. En el caso, con introducir la ruta al servidor de ftp, hará que el programa si abre un puerto, pueda recibir las conexiones. Agregar programa excepción

Si lo que se quiere abrir es un puerto de manera permanente, con independencia del programa que pueda escuchar en él, lo que se utilizamos es la opción de añadir un puerto:

Agregar excepción de puerto

En ambos tipo de excepciones se puede controlar el ámbito del cual se permitirán las excepciones:

Ámbitos del firewall

Cada uno de los ámbitos son los siguientes:

  • Cualquier equipo. En este ámbito permite la conexión desde cualquier equipo a nuestro ordenador.
  • Sólo mi red. Permite la conexión sólo desde aquellas direcciones IP que pertenezcan a la subred en la cual el ordenador tiene conectado interfaces.
  • Lista Personalizadas. Nos permite introducir la lista de direcciones IP que deseemos autorizar para conectad.
Por último recordar que si marca la casilla en la pestaña general de no permitir excepciones, se ignorará las configuraciones introducidas en esta pestaña.

Opciones avanzadas

Desde esta pantalla se permite configurar varias opciones:

Opciones avanzadas

  • De esta pestaña quizás lo más importante es la posibilidad de activar la conexión por interfaz (por ejemplo puede desearse que todas las conexiones PPP o VPN estén protegidas por el firewall por defecto, mientras que la conexión de LAN que sólo utilizamos en la oficina no).
  • El registro de seguridad nos permite especificar un archivo donde se registrarán los eventos que produzca el firewall (paquetes descartados, conexiones recibidas, etc) y limitar el tamaño del mismos.
  • Bajo la opción ICMP permite permitir la entrada de ciertos paquetes ICMP. Convendría dejar pasar aquellos que permiten el cálculo de MTU, concretamente el que se envía cuando un router no puede fragmentar los paquetes, porque en caso contrario pueden presentarse problemas de conectividad
  • La opción Configuración predeterminada permite restaurar los valores por defecto.

El firewall en un dominio de directorio activo

El firewall se puede configurar a través de una GPO o bien a través de las políticas locales. Existen dos perfiles cuando se configura de esta manera:
  • Perfil estándar: Este el perfil que aplica el sistema cuando no puede determinar que está en una red administrada a través de diretorio activo (dominio)
  • Perfil de dominio: Este perfil se activa cuando el sistema detecta que está conectado a una red de de directorio activo.
El sistema determina si está en una red de dominio o no a través de un algoritmo descrito en How Windows Firewall Works: se compara el sufijo DNS que tiene asignado todas las conexiones de red que no sean PPP o SLIP con el sufijo DNS que se ha almacenado en la clave de registro HKEY_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Group Policy\History\NetworkName tras la última actualización de las políticas de dominio. Con esta información:
  • Si el sistema no está conectado a una red de dominio, de existir un perfil, usaría el estándar - se puede aplicar un perfil estándar a través del de las políticas locales gpedit.msc.
  • Si coincide la información de DNS de la conexión de red (que no sea una conexión PPP o SLIP) con la que está almacenada en el registro tras la última actualización de políticas, el sistema considera que está conectado a una red manejada a través de directorio activo, y si está definido, empleará el perfil de dominio. En caso de que no coincididan, el sistema considerará que está conectado a una red no manejada, y por tanto, de estar definido, usaría el perfil estándar.
Una vez que el sistema ha determinado qué perfil va a usar, si existe alguna política de configuración definida para dicho perfil. Es importante señalar que las configuraciones distribuidas a través de perfiles tienen prioridad sobre todo lo demás, ya sea el GUI de control de la interfaz (firewall.cpl), el comando netsh, usando el contexto firewall o el API de Windows ya sea a través de lo implementado en los objetos implementados en la librería hnetcfg.dll. Una vez establecidas, no se pueden alterar ni a través del GUI ni a través del API.

Pueden controlarse varios parámetros a través de la política de dominio. Para acceder a las mismas hay que ir a Plantillas Administrativas, Red, Conexiones de Red, Firewall de Windows.

¿Qué falta en el post?

Hay varios puntos que me faltan por tratar en el post, y que espero ir poco a poco actualizando:
  • Como manejar el firewall a través del API que ofrece Windows.
  • Como manejar el firewall a través del comando netsh.
  • Una explicación más técnica de donde está el firewall,de que servicios depende y cómo se implementan las políticas.
  • Las políticas que se pueden configurar a través de una GPO.
  • La relación del firewall de Windows con los diferentes sistemas.
Iré actualizando el post o bien algunos nuevos conforme vaya tratando alguno de los puntos anteriores.

Referencias

Technorati Tags: ,

jueves, abril 10, 2008

Tecnología Intel vPro: Mejor virtualización pero también más DRM y control de contenidos

Acabo de leer el artículo que ha publicado Jon Stokes en Ars Technica sobre la nueva plataforma de virtualización que ha publicado Intel, denominada vPro. A primera vista Intel ha implementado una serie de tecnologías que permite hacer que todo el juego de instrucciones x86 sea virtualizable fácilmente (sin recurrir a emulación tras traps por instrucciones ilegales) y por otra parte ha implementado una IOMMU, una unidad que permite implementar entrada y salida a direcciones virtualizadas. Con ayuda de estas dos technologías, Intel se ha permitido presentar la primera implementación de trusted computing. La técnica de virtualización permite proteger diferentes sistemas opertivos que estén ejecutándose sobre la misma plataforma unos de otros, y al hypervisor encargado de manejar todos los recursos físicos, en especial en lo referente a las peticiones DMA y a las interrupciones, asegurándose que estas sean rutadas hacia la máquina virtual correcta. Del propio artículo
No longer will a device under the control of one VM be able to access another VM's memory space because the IOMMU knows which regions of physical memory correspond to which VM, and it can block or grant access to those regions based on the source of the I/O request.

DRM: El control de lo que puedes ejecutar en tu propia plataforma

¿Y que tiene que ver todo esta tecnología con el control de lo que puedes ejecutar en el PC?. Pues supongamos que tengamos un hypervisor que sólo se arranca si puede comprobarse que no ha sido modificado. El chip TPM puede hacer que toda la cadena de programas que se ejecuten, desde la BIOS hasta el reproductor de vídeo esté protegido por una firma criptográfica, ejecutándose todo el sistema en un entorno en el que se pueda confiar.

Ahora, si le añadimos las extensiones virtuales, pueden protegerse estas zonas de memoria de cualquier otro tipo de acceso, ya sea por otras máquinas virtuales, ya sea por binarios modificados del sistema.La IOMMU puede proteger el acceso a nivel de página de esta información y de borrar la información de la memoria usada una vez que ha sido liberada. Aunque se vende como un sistema de gestión ideal para la empresa, hay que tener esta cara oculta que presenta la tecnología.

Por cierto, ya hay IDS implementados como hypervisores como el Virtual Security Solution de Syamantec.

Por último este párrafo del artículo:

the NSA and the U.S. Army now rely on technology from the Trusted Computing Group, with the Army mandating the same TPM v1.2 modules that form the basis of vPro in all of its computers for network security reasons. This being the case, many folks, myself included, look at "trusted computing" technologies and wonder how the federal government allows them to proceed to market absent the export controls that are typical of strong encryption and so-called "dual-use" technologies that could have potential military applications. But that's a topic for another day.
A lo mejor, hay alguna puerta trasera que desconocemos ....

Referencias

Technorati Tags: ,

IBM Power 959 y CMT SPARC Enterprise

Acabo de leer esta mañana varias noticias relacionadas con los avances en CPU que se van a ir presentado en el mercado para estos últimos días.

Para empezar en OSNews hablan de la presentación del IBM Power 595 con la CPU Power6 hasta 5 Ghz. Las especificaciones del Power 595 son de las que quitan el hipo: hasta 64 cores Power6 a 5 Ghz, con 4 TeraBytes de RAM máximo, hasta 30 cajones para entrada y salida, 20 PCI-X slots adaptadores por armario, con un máximo de 600 por sistemas. Curiosamente, necesita una instalación especial para el sistema de refrigeración y pesa más de una tonelada.. Sun por otra parte ha presentado el CMT SPARC Enterprise T5140 y T5240, que tienen dos CPU UltraSparc T2+ con 64 hilos de ejecución cada uno de ellos.

Es interesante la visión de las aplicaciones que pueden ejecutarse en estos sistemas. El IBM recuerda a las aplicaciones clásicas de host, aunque supongo que a día de hoy lo que apuestan es por la virtualización (como la iniciativa PHANTOM en la que está trabajando).He tenido la impresión - no sé si equivocada o no -, que en IBM hay una cierta esquizofrenia: por un lado hay divisiones que siguen desarrollando los sistemas parecidos a los antiguos hosts y minis, a los cuales se le han añadido con calzador la posibilidad de ejecutar entornos POSIX (aunque el Power 959 lo que ejecuta es AIX).Y sobre todo, es interesante comparar estos ordenadores diseñados y pensados para consolidar con respecto a la técnica que ha usado Google para crear su cluster de aplicaciones que le permite usar hardware barato frente a estos bichos, aunque son usados en dominios de solución de problemas diferentes.

Technorati Tags: ,

miércoles, abril 09, 2008

Google App Engine

(vía Barrapunto) Google acaba de publicar Google App Engine, un conjunto de librerías y herramientas que permiten el desarrollo de aplicaciones que posteriormente pueden ejecutarse en la infraestructura de servidores de Google. Dentro del SDK publicado y la arquitectura puede verse:

Python

El SDK actualmente publicado usa el lenguaje Python, en su versión 2.5, y viene acompañado de una serie de librerías que proporcionan API para acceder a varios de los servicios de Google. En el runtime de Python que proporciona Google no están activados todos los módulos estándar de Python (ver lista de módulos que están disponibles en el entorno. También está limitado el uso de aquellas clases y funciones que acceden directamente a disco.

En un futuro el SDK parece ser que estará disponible para otros lenguajes de programación.

API que aporta

Google aporta una serie de API que permite acceder a las facilidades de almacenamiento que tiene implementadado Google (BitTable, GFS), acceso a los servicios de autentificación o a servicios que permiten comunicarse por http con otros sistemas.

Lo más interesante es poder acceder a las ingentes cantidades de almacenamiento de Google implementados a través de Google Filesystem y bigtable. Google se encargará de todo el trabajo de replicación, backup, alta disponibilidad, etc.

Arquitectura

He estado leyendo por encima las secciones de Getting Started para informarme del entorno de ejecución de las aplicaciones. Éstas se ejecutan usando la interfaz CGI y el SDK trae un servidor web que emula el entorno de ejecución que se va encontrar cuando esté en los servidores de Google. Una vez desarrollada la aplicación en local, con un comando se sube la aplicación a las granjas de servidores de Google.

Esta estructura de aplicaciones permite implementar fácilmente la escalabilidad y redundancia que hace a Google puntero, usando servidores baratos y gestionándolos con un pequeño equipo de personas, sin pérdidas de servicio en caso de averías. El desarrollador se olvida de todo tipo de efectos colaterales que puede tener una aplicación corriendo en entorno compartido y de la necesidad de implementar mecanismos de contención y sincronización entre nodos de clustes: todo lo provee Google, y esta es la gran ventaja que actualmente tiene frente a los competidores y lo que le ha permitido crecer.

Tiene un sistema de plantillas muy influenciado por otros frameworks Pythone xistentes, en especial django y un sistema para poder almacenar ficheros estáticos y poder servirlos obteniendo sus contenidos desde los sistemas de almacenamiento de base de datos.

Por último hablar del sistema de acceso a base de datos muy influenciado también por el framework de Django, el cual usa un sistema de consulta similar a SQL que denominan GQL, puesto que el sistema de base de datos no es relacional.

Términos de servicios

Las aplicaciones aparecerán como aplicacion-id.appspot.com, y en principio tiene 500MB de almacenamiento, acceso a una determinada cantidad de ciclos de CPU para usar y de momento de manera gratuito - o lo que es probable, tendrá una versión gratuita y otra de pago con acceso a muchos más recursos de almacenamiento y ciclos de CPU (ver los términos de servicio) y no olvidar este detalle:
4.1. Subject to Section 12 of the Terms, the Service is provided to you without charge for up to 500MB of disk storage, 10GB incoming bandwidth per day, 10GB outgoing bandwidth per day, 200 million megacycles of CPU per day and 2,000 emails per day. These quotas will be know as the “Fee Threshold”. Google reserves the right to change this quota at its discretion.

Comentarios

Siempre he estado trabajando en la zona de sistemas de los desarrollos web, y un framework de este tipo presente una serie de ventajas tanto para desarrolladores como para administradores de sistemas:
  • No tienes que preocuparte que tus aplicaciones están desarrolladas en cluster: Cuando se tiene una aplicación web que se diseño y pensó para correr en un solo servidor web, cuando se salta a una granja de servidores y se usa balanceadores puede surgir toda una serie de problemáticas debido a que las aplicaciones no fueron pensadas para ejecutarse en cluster.
  • Tienes una escalabilidad bestial. Google pensó todo este sistema pare disponer cantidades ingentes de fuerza de proceso y almacenamiento que fuera fácilmente ampliable añadiendo servidores baratos, y que además pudiesen ser mantenidos y monitorizados por un número reducido de técnicos. Ahora se pone a disposición de un público más general esta arquitectura.
  • No tienes problemas de aplicaciones compartidas - y quien se las haya visto con el IIS 5.0 y los nivels de aislamiento medio sabe a qué me refiero -. Si una aplicación casca, el resto del sistema no tiene porqué irse por delante. Es más, al ser todo distribuido se tiene sistemas de migración automática de las aplicaciones por los servidores de la granja.
  • Entre las cosas malas habrá que decir que estás poniendo todos los huevos de tu aplicación en una cesta, y por supuesto, Google cobrará por aquellas aplicaciones que tengan éxito. Aparte Amazon Web Services no hay ahora mismo nada en el mercado que se le parezca.
Será interesante ver por donde evoluciona la plataforma y el poder que Google consigue en Internet a través de estas iniciativas.

Referencia

Technorati Tags:

Una cambio de comportamiento del gcc elimina chequeos de seguridad

(vía heise-online) Acabo de leer este aviso donde se comenta que una optimización del gcc que existe a partir de la versión 4.2 elimina las verificaciones de seguridad, según la siguiente construcción:
char *buf; int len; len = 1 << 30; if (buf+len < buf){   Overflow }
La verificación anterior el gcc la optimiza y desaparece del código generado. La construcción anterior es correcta en C, pero hay que decir que esto es un cambio de comportamiento que se ha producido en el gcc. Puede encontrarse más información en este enlace

Technorati Tags: ,

Microsoft publica los protocolos que utiliza Office 20007

Acabo de leer en OSNews que Microsoft ha publicado los protocolos que usa Office 2007. Entre otras especificaciones estarán las que usa Sharepoint Server 2007, Exchange Server 2007 y Outlook. Según esta noticia de eWeek si alguno de esos protocolos se utiliza para distribuir aplicaciones comerciales y están cubiertos con alguna patente, tendrán que pagar royalties a Microsoft.

Microsoft ha publicado un pliego sobre las patentes y los desarrollos de fuentes abiertas. Según se desprende de la lectura del pliego, Microsoft en principio no va a pedir royalties a los desarrolladores opensource siempre que no lo distribuyas comercialmente

If You engage in the commercial distribution or importation of software derived from an open source project or if You make or use such software outside the scope of creating such software code, You do not benefit from this promise for such distribution or for these other activities
Los protocolos incluidos en estas publicaciones son varios Microsoft Office Protocols, SharePoint Products and Technologies Protocols y Exchange Server Protocols.

Technorati Tags: ,

martes, abril 08, 2008

Librerias en Objetive-C para acceder a los servicios de datos de Google

(vía Google Data APIS Blogs) Google ha publicado unas librerías para poder acceder a los servicios de datos de Google (que incluye el acceso a Base Data API,Blogger,Google Calendar APIs and Tools, Google Code Search Data API,Contacts Data API,Google Documents List Data API,Google Notebook Data API, Picasa,Google Spreadsheets Data API y youtube. La librería está disponible en código fuente, publicado con la licencia de Apache 2.0. Con esta librería se pueden desarrollar aplicaciones usando Cocoa. Como mínimo es necesario usar MacOS 10.4.x Tiger. Tiene varios ejemplos para poder acceder a los servicios de Google, compilables directamente en Xcode.

Technorati Tags:

lunes, abril 07, 2008

¿Gmail cortado en algunas soluciones antispam?

Ars Technica acaba de publicar un artículo donde se habla de los posible problemas con los antispam que está teniendo gmail, a raíz de la rotura del sistema de CAPTCHAS que usa Gmail.

El tema de las medidas antispam es algo delicado, puesto que hay empresas donde los porcentajes de SPAM recibidos suponen un altísimo tanto por ciento del correo recibido, y que causa una pérdida de tiempo en intervención manual a la hora de limpiar el correo de los buzones de entrada.

Los spammer siempre han buscado la manera de romper los accesos a los sitios que ofrecen cuentas de correo gratuita para poder usar una dirección legítima desde donde puedan enviar sus anuncios. Si existe alguna manera automática de generar direcciones de correos legítimas con ayuda de un script, la labor de los spammers se ve facilita enormemente. Para eso se usan los sistemas basados en CAPTCHAS: aquellos que intentan comprobar que la persona que está accediendo a un servicio es una persona y no un script. Cuando el sistema que funciona correctamente, es muy fácil localizar que la cuenta de correo responsable del envío, pero sin embargo, roto el sistema de captchas, pueden usarse scripts de creación de cuentas para mandar

El problema es que cuando empiezan a caer estos sistemas de aquellos sitios que tienen cierta reputación como Gmail o Yahoo, porque si los servidores de correo salientes de los mismos empiezan a ser bloqueados o ralentizados por los sistemas antispam, mucha gente que usa estos sistemas de correo de manera legítima empiezan a verse afectados.

Technorati Tags:

viernes, abril 04, 2008

Encriptación de particiones en Linux

He estado estos últimos días lidiando con sistemas de encriptación de discos duros en Linux , concretamente con la infraestructura LUKS - Linux Unified Key Setup. Este proyecto define un estándar de formato de disco encriptado y una implementación de referencia (cryptsetup) de la misma en Linux.

El sistema mapea una partición protegida y encriptada de manera transparente como un dispositivo de bloques sobre el cual se puede usar las herramientas habituales de manejo de particiones (mkfs, mount, etc). El mapeo aparece bajo el directorio /dev/mapper/nombre, donde nombre es una etiqueta que se va a asociar a dicho mapeo.

Por poner un ejemplo. Supongamos que /dev/hda3 es una partición encriptada con el algoritmo AES.Se quiere montar la partición a la que supongo que está ya encriptada y formateada:

cryptsetup -c aes -y create /dev/hda3 home
mount -t ext3 /dev/mapper/home /media/homecrypt
La etiqueta que hemos usado en este caso es home. La partición desencriptada aparecerá en /dev/mapper/home y la podremos usar como una partición normal, excepto que todo el acceso a la misma encriptará para escribir o desencriptará los datos de manera transparente al usuario.

Para desmontar la partición y borrar el mapping los pasos a dar serían:

umount /media/mapper/home
cryptsetup remove home
Si se quiere preparar una partición de disco para poder ser usada por la infraesrtructura de cifrado, y formatearla con el uso de ext3 los pasos a dar son los serían los siguientes (ojo, las siguientes órdenes borrarán todos los datos de la partición).
cryptsetup -y -c aes luksFormat /dev/hda3
cryptsetup -c aes -y create /dev/hda3 home
mkfs -t ext3 /dev/mapper/home
mount -t ext3 /dev/mapper/home /media/homecrypt

Usando ficheros de imágenes encriptadas

A veces lo ideal no es usar una partición física de disco, sino poder usar un fichero de imagen, que queremos que esté encriptado y que nos aparezca en el sistema como otro disco más. Para ello aprovechamos el soporte de dispositivos loop que ofrece Linux, para montar un fichero y que aparezca en el sistema como si fuese un dispositivo de bloques. Si queremos crear un fichero de 100MB encriptado:
dd if=/dev/zero of=filesystem.crypt count=512M
losetup /dev/loop0 filesystem.crypt
cryptsetup -y -c aes luskFormat /dev/loop0
cryptsetup -c aes -y create /dev/loop0 home
mkfs -t ext3 /dev/mapper/home
mount -t ext3 /dev/mapper/home /media/homecrypt
No olvidar desmontar la partición y desactivar el mapeo del sistema de criptografía una vez dejado de usar.

Problemas de la solución

El primer problema claro que le veo a esta solución es que necesitas permisos de administrador para poder ejecutar el conjunto de órdenes anteriores. Para mi gusto cfs que permitía sin ningún problema usar directorios encriptados por cada usuario. Tengo que mirar como se integran con KDE o GNOME este tipo de herramientas para que permitan un uso transparente del dispositivo, y en especial si es posible usar el automounter para que lo haga de manera autimática (por ejemplo el directorio ~/almacen de mi $HOME, automáticamente se monte un fichero encriptado)

Referencias

Technorati Tags: ,

miércoles, abril 02, 2008

Proxies, Proxies, Proxies o túneles para todos los gustos

La estructura clásica de salida a Internet de una empresa suele ser la siguiente:

Estructura clásica d acceso

En rojo está pintado las peticiones del cliente, en verde las respuestas del proxy y en azul el tráfico que genera el proxy con el exterior.

El PC del sufrido usuario suele estar detrás de un firewall que evita su conexión a Internet, y los navegadores se comunican con el exterior a través de un proxy, habitualmente este proxy permite la navegación sólo en conexiones http al puerto 80 y en conexiones https al puerto 443.

En el esquema anterior, si se tiene suerte, puede haber usuarios que puedan acceder a ciertas direcciones exteriores a través de técnicas de NAT implantadas en el firewall.

¿Y si queremos acceder a algún sitio, por el motivo que sea?. La solición más fácil suele ser usar un salto a través de una máquina que esté corriendo un servidore ssh.A día de hoy, es algo muy sencillo de montar en casa con una distribución Linux, y usar un cliente ssh como putty. Putty permite el uso de servidores proxy http, y por tanto permitirá la conexión contra una máquina situada en el exterior.

Sin embargo, aquí empiezan algunos problemas: no solemos disponer de direcciones IP públicas, normalmentem, si los proxy está bien configurados sólo dejarán conectar al puerto 443 usando el método CONNECT, y el servidor ssh suele estar escuchando en el puerto 22, y por último es posible que el proxy esté utilizando autentificación NTLM, con lo cual, el putty no podrá usarlo. Veamos como resolver cada uno de esos problemas.

Solucionar los problemas de IP dinámica

Lo más sencillo en este caso es usar algún proveedor de DNS dinámicos. Suelo usar sin ningún problema DynDNS, el cual tiene clientes para todas las plataformas. Se configurará para que averigüe la dirección IP conectándose a una página web. De esta manera, como es probable qu en casa tengamos un ADSL con los ordenadores colocados detrás NATeados, será capaz de averiguar cual es la IP pública que tiene asignada el ADSL.

En el caso de que la dirección IP pública sea fija, es tan sencillo como crear las correspondientes entradas en el registro de DynDNS, sin necesidad de usar ningún cliente.

Escuchar en el puerto 443

Como medida de seguridad, la mayoría de los proxies que están configurarados en las empresas no permiten usar el métido CONNECT a un puerto distinto del 443 (que equivale al https). Por eso, es mucho mejor poner el servidor ssh a escuchar en ese puerto (aparte del 22 si se quiere) y en el esquema que se está usando para implantar esta solución, traducir la conexión hacía el puerto 443. De esta manera, saltaremos la restricción de puerto que suele estar activada en el proxy.

Configuración del Proxy en el Putty

Ya se use con el proxy ntlmaps o bien con el proxy de la empresa, hay que configurar el tipo de proxy que se va usar. Si arrancamos Putty y nos vamos a Connection->Proxy, se nos mostrará la siguiente pantalla. Es raro que nos encontremos en una empresa un proxy socks4 (porque suele significar acceso libre free for all sin necesidad de autentificación por parte de un usuario). Un proxy socks5, si podrá usar autentificación. Sin embargo, lo más normal que nos encontremos sea un proxy http, y será el que se use normalmente.

Lo único que habrá que hacer en este caso es marcar el Proxy type como HTTP, introducir en el cuadro de texto Proxy hostname la dirección o nombre DNS de la máquina donde está el proxy que se va a usar, en Port el puerto donde está escuchando el proxy, y si este necesita usuario y password se introduce en los campos Username y Password.

Autentificación NTLM

Esta es la parte más problemática que suele encontrarse un usuario en entornos Microsoft. Si se ha desplegado un servidor ISA server, lo más normal es que utilice el sistema no estándar de autentificación NTLM, para evitar tener que introducir las credenciales del usuario al navegar por Internet. Aunque la mayoría de los navegadores actuales como Firefox o Safari pueden usarlo sin ningún problema, no ocurre lo mismo de otras herramientas que pueden usar un proxy http, pero que no entienden dicho esquema de autenficación no estándar.

La idea es usar un proxy local, que será el encargado de recibir las peticiones del programa que lo necesite, se autentifique contra el ISA server usando el esquema NTLM y posteriormente le pase la petición que ha recibido (proxy chaining, o encadenamiento de proxies). Un programa ideal para esta función es ntlmaps (NTLM Authorization Proxy Server), escrito en Python, y por tanto con un alto grado de portabilidad - sólo es necesario instalar el intérprete Python en la máquina.

La configuración del programa es sencilla. Se descomprime el fichero y en el directorio donde se descomprime está el fichero server.cfg donde se introducen los parámetros de configuración. Lo más relevante son:

LISTEN_PORT: 8500 # Puerto local donde escuchará el servidio. En este ejemplo 8500.
PAREN_PROXY: proxy.padre.empresa.int # Dirección o nombre DNS del proxy al que le mandaremos las peticiones
PARENT_PROXY_PORT: 80 # Puerto del proxy padre, aquí por ejemplo 80
NT_DOMAIN: DOMINIONT # Nombre del dominio NT en el que nos encontramos.
USER: usuario # Nombre del usuario que se va a usar
PASSWORD: password # Contraseña del usuario especificado en USER
Dejando el resto de los parámetros por defecto.

Referencias

Technorati Tags: , ,

martes, abril 01, 2008

¿Quién está usando ADA actualmente?

(vía reddit.programming Acabo de leer un listado de proyectos que están usando actualmente en lenguaje ADA para implementar la funcionalidad: Sistemas de tráfico aéreo de varios países (por ejemplo el sistema de tráfico aéreo europeo - incluyendo información sobre como migrar un proyecto mastodóntico a Linux - ), los sistemas de metro de varias ciudades importantes, toda la serie de aviones comerciales Airbus 320,330, 340 y 380 , todos los Boibgs desde el antiguo 737-200 hasta el actual 787, los cohetes Ariane 4 y 5, aviones de combate como el F-16 o el F-22. La página tiene enlaces a artículos que describen el uso de ADA.

Technorati Tags:

SR-71 Blackbird

Leyendo el blog de Elentir vi el otro día un enlace a YouTube con un montaje de imágenes del SR-71 Blackbird

Este avión de reconocimiento nació de Skuns Works la sección de Lockheed Martin dedicada a proyectos secretos. El padre de muchos de sus conceptos de diseño fue Clarence Jonhson, el lider de la sección, implicado entre otros diseños del avión espía U2 o del F-117. El diseño del SR-71 evolucionó desde los diseños del YF-12A y A-12, siendo un avión de reconocimiento diseñado para volar a Mach 3.2 y a unos 85000 pies de altura. Algunos hechos interesantes de este avión son:

  • El fuselaje está hecho de titanio, comprado a la Unión Soviética, precisamente el país que se tuvo en mente espiar cuando se diseño.
  • El motor J-58 que utiliza un combustible especial, JP-7, que tiene que encenderse con ayuda de de una reacción química, puesto que el combustible es muy poco volátil y diseñado para trabajar a las altas temperaturas que se producen al volar a Mach 3.2
  • El fuselaje es corrugado y las piezas a temperatura ambiente no encajan completamente, esto sólo se produce cuando el avión alcanza las velocidades de servicio. Como consecuencia de esto, pierde combustible hasta que el calor producido en el fuselaje por el rozamiento del aire a alta velocidad lo dilata y sella las piezas.
  • Los pilotos llevan trajes espaciales debido a la altura que vuela.
  • Nunca ha sido derribado.

Referencias

Technorati Tags: ,