el foro de jericho

31 de agosto de 2008

Hace poco leí un artículo que hablaba de un nuevo concepto en la administración de redes: la de-perimeterization.

Hasta ahora las principales barreras que podíamos poner los administradores en sus redes eran los cortafuegos. ¿Quien no tiene uno en su empresa?. Yo tengo un Cisco Pix de lo grandotes... y por si esto no fuera poco lo tenemos con otro en failover. Sin estos cacharros sería imposible pensar la seguridad en Internet y separar lo que nosotros pensamos que es "dentro" (lan) de lo que es "fuera" (internet). Con todas las nuevas tecnologías de vpns, teléfonos, wlans, pda, ultraportatiles móviles... cada vez se me hace más difícil saber que es lo que está dentro de mi lan y lo que esta fuera.

Pues bien, el foro de jericho es una organización internacional de seguridad que intenta dar una nueva visión de la seguridad de redes aportando un nuevo paradigma que parece que puede dar una oportunidad a una mayor seguridad. El concepto de de-perimeterization hecha por tierra todo lo hemos aprendido en manera "tradicional" de hacer seguridad en redes.

Ellos explican la de-perimeterization de forma básica como "... la única estrategia de seguridad fiable consiste en proteger la información por sí misma, en vez de proteger la red y el resto de infraestructuras TI". Según ellos no hay ninguna red de confianza y cada dispositivo, base de datos o archivo debe protegerse a si mismo.

En el futuro cualquier base de datos o archivo poseerá cierta información que asegure que sólo pueda ser leeida y manipulada por las personas autorizadas. En la actualidad grupos como Oracle ya están trabajando en estos conceptos con su IRM.

El foro de jericho, como buen profeta tiene sus propios mandamientos en "los mandamientos del foro de jericho v1.2".

En resumidas dice:

1) El alcance y el nivel de protección debería estar especificado y ser el apropiado según el riesgo.
2) Los mecanismos de seguridad deben ser genéricos, simples, escalables y fáciles de utilizar.
3) Mantener el contexto según el peligro.
4) Los dispositivos y aplicaciones se tienen que comunicar utilizando protocolos seguros y abiertos.
5) Todos los dispositivos deben ser capaces de mantener su política de seguridad en una red que no sea de confianza.
6) Todos los usuarios y procesos deben están declaramos, así como los niveles de confianza para cualquier transacción que tenga lugar.
7) Los niveles de garantía de la confianza mutua deben ser determinables.
8) La autentificación, autorización y no repudio deben funcionar fuera del área de control.
9) El acceso a los datos debe están controlado por atributos de seguridad de los propios datos.
10) La privacidad de los datos requiere una segregación de las funciones y de los privilegios.
11) Por defecto, cuando se almacenan los datos, se envían o se utilizan tienen que tener la protección adecuada.

Amen.

¿que pensais vosotros de esto?, ¿llegará hacerse realidad esta forma de trabajar?.

Más información:
+ http://www.opengroup.org/jericho/about.htm
+ http://www.oracle.com/technology/products/content-management/irm/index.html
+ http://www.opengroup.org/jericho/commandments_v1.2.pdf
+ http://en.wikipedia.org/wiki/De-perimeterisation

netstat-nat

30 de agosto de 2008

Esta es una de esas utilidades que tienen todos los administradores que montan puertas de enlace bajo linux.
Se define como una utilidad hecha en C que nos permite ver las conexiones nat establecidas por la máquina.
Dado que unos de los resultados de nat es hacer invisible la lan a internet es interesante tener una utilidad como esta.

Para instalarlo haremos lo siguiente:

# wget http://www.tweegy.nl/download/netstat-nat-1.4.9.tar.gz
# tar -xzvf netstat-nat-1.4.9.tar.gz
# cd netstat-nat-1.4.9
# ./configure
# make
# make install
Para ejecutarla tan solo basta con hacer un "netstat-nat -p tcp". De esta forma veremos las conexiones nat establecidas bajo el protocolo tcp.

Si quisiéramos saber sin una maquina a.b.c.d de nuestra lan esta estableciendo una conexión nat por esta puerta de enlace linux haríamos un "netstat-nat -s a.b.c.d". También lo podemos hacer en sentido contrario.
Si queremos saber si una maquina de internet e.f.g.h ha establecido una conexión nat a alguna maquina de nuestra lan a través de la puerta de enlace haríamos "netstat-nat -d e.f.g.h".

Más información:
+ http://www.tweegy.nl/projects/netstat-nat/index.html
+ http://es.wikipedia.org/wiki/NAT

un trozo de codigo en el espacio

28 de agosto de 2008

Esta noticia me ha hecho gracia. Me recordó que uno de los objetivos de Kirai es que un trozo de código suyo se ejecute en el espacio.
Pues si hubiera sido el creador del virus W32.Gammima.AG lo hubiera conseguido. Resulta que ha uno de los astronautas se le coló este virus en su portátil y que posteriormente se lo llevo al espacio infectando así el resto de portátiles de la ISS.

Más información:
+ http://www.telegraph.co.uk/connected/main.jhtml?xml=/connected/2008/08/27/dlvirus127.xml
+ http://www.spaceref.com/news/viewnews.html?id=213

modulos cpan de perl

26 de agosto de 2008

CPAN son las siglas de Comprehensive Perl Archive Network. Se trata de un enorme recolector de módulos para Perl que permiten extender las funcionalidades de este lenguaje.
Segun Perl hay más de 58.000 módulos disponibles para multitud de tareas como matemáticas, acceso a base de datos, creación de PDF, estadísticas, etc.
Cualquiera puede crear e instalar estos módulos Perl es su sistema Linux, para ello solo tiene que saber que módulos necesita. Si arrancamos un programa en Perl y nos peta porque nos falta un módulo de CPAN nos dirá cual nos falta. Algo como "te falta el modulo Proc::ProcessTable". Otra manera es abrir el archivo Perl y mirar que módulos carga.

Veriamos algo como:

#!/usr/bin/perl
use strict;
use warnings;
use POSIX;
use IO::Scalar;
use Proc::ProcessTable;
use File::Path;
use File::Rsync;
use Mail::Mailer;
...
En este caso este programa de Perl utiliza 8 módulos los cuales unos pueden estar instalados por defecto en nuestro sistema y otros no.

Aqui podeis buscar los modulos de Perl que necesiteis.

Para instalar un modulo CPAN lo mejor es entrar en el shell de Perl con el siguiente comando:
# perl –MCPAN –e shell
Si es la primera vez que ejecutáis el shell puede ser que os pida configurar ciertos parámetros del Perl. Memoria temporal, carpetas temporales, repositorios etc. Para quien no sepa que le pregunta dejar los valores que pone por defecto. Durante este Wizard habrá un apartado que os preguntará en que continente estais. Contestad el vuestro porque esto hará que Perl busque el repositorio CPAN más cercano. En mi caso seleccionaria Europa -> España y finalmente seleccionaría por ejemplo el repositio de RedIris.
Para buscar mirror podeis empezar por aquí.

Al finalizar el wizard os tiene que salir el prompt de cpan. Ahora solo os queda instalar el módulo. Si os falta el módulo Mail::Mailer tenéis que hacer:
Cpan> install Mail::Mailer
Si por algun motivo este modulo depende de otro, el proceso de install también instalará las dependencias entre modulo que se necesite (cosa muy probable).

Más información:
+ Otras maneras de instalar modulos.

recuperar contraseña root de mysql

23 de agosto de 2008

No es posible recuperar la contraseña de root de mysql (ni de muchos otros sistemas). Lo que se puede hacer es cambiarla por otra.
Para cambiar la contraseña de root de mysql si la hemos perdido, tenemos que arrancar la base de datos en un estado en el cual se carge sin protección alguna.

Los pasos son los siguientes:
+ Parar mysql en tú sistema.

# service mysqld stop
+ Arrancar mysql sin cargar los usuarios y sin conexiones externas. Para cambiar la contraseña se tendrá que hacer desde la propia maquina en local.
# ./usr/bin/mysqld_safe --skip_grant_tables --skip_networking&
+ Arrancamos la consola de mysql y cambiamos el password.
# mysql
> use password for 'root'@'localhost' = password('mi_nueva_contraseña');
> flush privileges;
+ Reiniciamos mysql.
# service mysqld stop
# service mysqld start
Más información en:
+ http://dev.mysql.com/doc/refman/5.0/es/server-options.html

lynis audit tool for linux

21 de agosto de 2008

Lynis es una herramienta para auditar un sistema UNIX/Linux escrita en Shell. Se basa en una bateria de pruebas y revisa por ejemplo los métodos de autentificacion, la configuración del firewall, los permisos en tus archivos, las contraseñas de tus usuarios etc.

Es una herramienta aparentemente muy facil de instalar y utilizar pero recomendable de pasar cada vez que hagamos alguna modificación en nuestro servidor Linux. Sobre todo si lo tenemos colgado de Internet.

Para instalarlo descargamos su ultima versión, por ejemplo la lynis-1.1.8.tar.gz y la copiamos a nuestro servidor.

# tar -xzvf lynis-1.1.8.tar.gz
# su - root
# ./lynis --check-all -Q
Podemos ver que el ejecutable lynis esta escrito en shell y que toda la batería de pruebas que realizará se encuentran en la carpeta /include.

Para arrancarlo utilizaremos el parámetro --check-all para hacer un chequeo completo y -Q para que no haga una pausa después de cada bateria de pruebas.
Una vez finalizado nos monstrará un resumen de todo lo que ha encontrado y si eres un administrador cuidadoso solo debería encontrarte unos tres o cuatro Warnings.
Normalmente a mi siempre me da Warnings en: el gestor de arranque Grub no tiene contraseña, en la carpeta /tmp hay archivos de más de 90 días sin utilizar y el iptable tiene reglas de filtrado que no se utilizan.

Una buena recomendación es programar esta herramienta una vez a la semana y enviaros el informe por correo, de esta forma si cambias algún permiso o alguna configuración por error lo podréis ver en el informe semanal del audit:
#  ./lynis --check-all -Q | mail -s "Audit servidor" admin@miempresa.com
Más informacion:
+ http://www.rootkit.nl/files/lynis-documentation.html
+ http://www.rootkit.nl/files/lynis-changelog.html

scriptomatic

12 de agosto de 2008

Hace poco descubrí una herramienta de script muy útil para todos los que tengamos Active Directory. Esta es una herramienta gratuita de Microsoft llamada ADSI Scriptomatic. ADSI sin las siglas de Active Directory Services Interfaces. Una vez descargado y descomprimido copiamos su ejecutable dentro de la carpeta Windows y ya podemos comenzar a utilizarlo.

Con Sriptomatic podemos arrancar un Wizard que nos escribe el código necesario en Windwos Script Host necesario para acceder a los objetos del LDAP del Active Directory. Podemos hacer cuatro operaciones basicas: crear un objeto, borrarlo, leerlo o modificarlo. Estas cuatro operaciones las podemos hacer sobre otros cinco objetos: usuario, computadores, impresoras, grupos o unidades organizativas. Si queremos leer los datos de un usuario llamado "test" dentro de la unidad organizativa "central", seleccionariamos del Wizard "leer" y "usuario".

Al final solo tenemos que modificar el código segun nuestras necesidades:

strContainer = "ou=Central"
strName = "test"

On Error Resume Next

Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objItem = GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))
Else
  Set objItem = GetObject("LDAP://cn=" & strName & "," & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If

strname = objItem.Get("name")
WScript.Echo "usuario: " & strname
strtelephoneNumber = objItem.Get("telephoneNumber")
WScript.Echo "telefono: " & strtelephoneNumber
strmail = objItem.Get("mail")
WScript.Echo "correo: " & strmail
El ejemplo anterior consulta el usuario "test" y muestra por pantalla su nombre de usuario, telefono y dirección de correo.

Aun no he utilizado Scriptomatic pero se me ocurre poder utilizarlo para automatizar el alta y baja de usuarios del Active Directory de forma automática.

Podemos ir más lejos. Tambien existe el Scriptomatic Version 2 (sin el ADSI delante) que funciona y se instala de la misma manera pero que nos da la posibilidad de acceder a cualquien objeto WMI de Windows (procesos, usuario, espacio en disco, red, politicas...) y todo con lenguaje de script.
Supongamos que queremos tener tener un listado de los trabajos que hay pendientes en la impresora. Desde Scriptomatic Version 2 seleccionamos en "WMI Namespaces" la opción root\CIMV2 y el "WMI Class" seleccionamos Win32_PrinJob.

Obtendremos un código como este:
On Error Resume Next

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

arrComputers = Array("MI_SERVIDOS")
For Each strComputer In arrComputers
   WScript.Echo
   WScript.Echo "=========================================="
   WScript.Echo "Computer: " & strComputer
   WScript.Echo "=========================================="

   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PrintJob", "WQL", _
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)

   For Each objItem In colItems
      WScript.Echo "Caption: " & objItem.Caption
      WScript.Echo "DataType: " & objItem.DataType
      WScript.Echo "Description: " & objItem.Description
      WScript.Echo "Document: " & objItem.Document
      WScript.Echo "DriverName: " & objItem.DriverName
      WScript.Echo "ElapsedTime: " & WMIDateStringToDate(objItem.ElapsedTime)
      WScript.Echo "HostPrintQueue: " & objItem.HostPrintQueue
      WScript.Echo "InstallDate: " & WMIDateStringToDate(objItem.InstallDate)
      WScript.Echo "JobId: " & objItem.JobId
      WScript.Echo "JobStatus: " & objItem.JobStatus
      WScript.Echo "Name: " & objItem.Name
      WScript.Echo "Notify: " & objItem.Notify
      WScript.Echo "Owner: " & objItem.Owner
      WScript.Echo "PagesPrinted: " & objItem.PagesPrinted
      WScript.Echo "Parameters: " & objItem.Parameters
      WScript.Echo "PrintProcessor: " & objItem.PrintProcessor
      WScript.Echo "Priority: " & objItem.Priority
      WScript.Echo "Size: " & objItem.Size
      WScript.Echo "StartTime: " & WMIDateStringToDate(objItem.StartTime)
      WScript.Echo "Status: " & objItem.Status
      WScript.Echo "StatusMask: " & objItem.StatusMask
      WScript.Echo "TimeSubmitted: " & WMIDateStringToDate(objItem.TimeSubmitted)
      WScript.Echo "TotalPages: " & objItem.TotalPages
      WScript.Echo "UntilTime: " & WMIDateStringToDate(objItem.UntilTime)
      WScript.Echo
   Next
Next

Function WMIDateStringToDate(dtmDate)
WScript.Echo dtm: 
 WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
 Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
 & " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
End Function

Microsoft también habla Logonomatic (scripts de inicio de session en Windows) y de Eventomatic (scripts para acceder al visor de sucesos de Windows) pero no he encontrado información y parece ser solo proyectos futuros del grupo de programadores de scripting de Microsot.

integrar zimbra gal en outlook

1 de agosto de 2008

Zimbra tiene una libreta global de direcciones llamada GAL (Global Address List) donde se encuentran todas las direcciones de correo.
Si desde el Webmail de Zimbra hacemos una busqueda dentro de la GAL estaremos buscando entre todas las direcciones de correo existentes en Zimbra.

Esta libreta de direcciones es accesible desde LDAP y por tanto es accesible desde cualquier cliente de LDAP que tengamos. Outlook da soporte para crear una libreta de direcciones de LDAP. Utilizaré esta opción para enlazar Outlook con la libreta de direcciones GAL de Zimbra de forma que los usuarios puedan hacer uso de ella.

+ Abrimos el Outlook y hacemos "Herramientas -> Cuentas de correo electronico".
+ Seleccionamos Ver o cambiar libreta de direcciones existente. Como mínimo tendremos que tener una libreta de direcciones llamada "Libreta de direcciones de Outlook" que corresponde a la libreta de direcciones por defecto de la instalación del Outlook.
+ Seleccionamos Agregar y le decimos añadir un "Servicio de directorios de Internet (LDAP)".
+ En el "Nombre del servidor" ponemos la direccion IP o la direccion DNS del servidor Zimbra. En "Información de inicio de sessión" no especificaremos nada.
+ En "Más configuraciones", seleccionaremos el puerto 389 y el "Base de busqueda" colocaremos la siguiente cadena de busqueda:

ou=people,dc=miempresa,dc=com


+ Es necesario cerrar el Outlook y volverlo abrir.

Hay que tener en cuenta que los cliente de Outlook tienen que tener acceso al puerto UDP/389 del servidor de Zimbra. Puede ser necesario retocar la configuración del firewall para dejar pasar este tráfico.

Una vez está todo configurado ya podemos realizar búsquedas sobre la GAL desde Outlook.

+ Abrimos el Outlook y vamos a "Herramientas->Libreta de direcciones". En el desplegable "Mostrar los nombres que figuran en" debe aparecer la libreta de contactos de Outlook y la nueva libreta de contactos GAL que hemos configurado anteriormente.
+ En "Mostrar los nombre que figuran en" seleccionamos nuestra libreta GAL y buscamos a una persona cualquiera que sepamos que existe en nuestro Zimbra.
+ Pulsamos el botón "Seleccionar elementos" y se nos abre un formulario para realizar una búsqueda.





Más información en:
+ http://www.stern.nyu.edu/it/guides/ldap-outlook.html
+ http://urpiano.wordpress.com/2006/11/10/libreta-de-direcciones-de-active-directory-en-outlook-2003/