Comandos interesantes, dtrx

Hoy es uno de estos días en los que te das cuenta de que GNU/Linux puede ser bueno y simplificarte la vida. También puede ser el día en el que te des cuenta de que vas mayor y ya no quieres acordarte de los parámetros que le pasas a un comando. Sea como sea, hoy voy a hablar del comando dtrx. Quizás alguno ya lo conozcáis, y otros todavía no. dtrx descomprime o extrae los fichero de un número muy grande de formatos. En la versión 6.6, soporta tar, zip, cpio, rpm, deb, gem, 7z, cab, rar, gzip, bzip2, lzma, compress and InstallShield. Como veis una gran cantidad de formatos que muchas veces tenemos que andar recordando cómo se hace. Gracias a dtrx esto ya no será necesario.
Para usarlo, nada más simple que,
shell> dtrx zabbix-2.0.8.tar.gz
Por defecto y si no le pasamos parámetros detecta el tipo de fichero y lo descomprime. En caso de que le pasemos como parámetro la opción -l/-t, podemos sacar un listado de los ficheros que están dentro del contenedor, sin extraer su contenido.

Sin duda, uno de esos comandos que te simplifican la vida.

La entrada Comandos interesantes, dtrx la puedes leer en Puppet Linux.
Leer más

kUbuntu VirtualBox Guest additions fail

Por motivos que todavía desconozco muy bien, terminé instalando un sistema kUbuntu en una máquina virtual. Si bien es cierto que fui usuario de KDE, hace años que lo dejé de lado, ya que cada vez cargaba más y más la máquina, para sacar el mismo provecho que XFCE.
El caso es que tras instalar la máquina, decidí instalar las Guest additions de VirtualBox para que vaya más fluida y pueda intercambiar datos de forma rápida y sencilla con el host anfitrión. Tras hacerlo (y por lo que parece todo terminar correctamente), reinicio la máquina tal como indican las instrucciones y al volver al sistema, no es lo que esperaba, los servicios se han instalado, pero no arrancan. El módulo del kernel no está cargado y además no se puede cargar. Si intento forzar el arranque obtengo lo siguiente:
shell> /etc/init.d/vboxadd start
Starting the VirtualBox Guest Additions ...fail!
(modprobe vboxguest failed)

shell> modprobe vboxguest
FATAL: Module vboxguest not found.
Esto no es desde luego lo esperado. El sistema tiene instalado el software, pero no funciona. Lo vuelvo a instalar y pasa exactamente lo mismo. Está claro que el fallo viene de otro lugar.
La ejecución de VBoxLinuxAdditions.run no está, lo que se dice precisamente depurada, y aunque falten un buen puñado de paquetes instalados, no avisa y lo que es peor, termina aparentemente bien. La solución,
shell> apt-get install dkms
shell> apt-get install build-essential
Tras la instalación de estos paquetes, volvemos a lanzar el instalador de las Guest additions.
shell> ./VBoxLinuxAdditions.run
Y ahora ya podéis reiniciar el sistema y debería de funcionar correctamente :-)

La entrada kUbuntu VirtualBox Guest additions fail la puede leer en Puppet Linux.
Leer más

Importante vulnerabilidad en Zimbra

Llevo unos 15 días bastante ocupado, por lo que las lecturas educativas de noticias se ha reducido y mucho.
Ayer me entero, gracias a @susibarreras, de una importante vulnerabilidad en Zimbra que según lo que apuntan, se descubrió a principios de este mes. Luego realmente, y según los responsables de Zimbra, dicha vulnerabilidad ya fue reportada hace tiempo (Febrero 2013) y todo parece ser así, ya que desde la versión 8.0.3 en adelante está corregida.
El problema radica en todas aquellas versiones no actualizadas. Se estima que cerca del 80% son vulnerables en la actualidad. El fallo es un LFI (Local File Inclusion) sobre una URL a la que cualquier persona puede acceder y descubrir así las credenciales del servidor sobre el que lance la consulta, ya que de forma muy simple se puede leer el archivo localconfig.xml de Zimbra (credenciales de acceso).

La vulnerabilidad saltó al público de manos de rubina119, que publicó un pequeño código Ruby que se aprovecha de dicha vulnerabilidad.

El LFI se produce sobre el fichero
/res/I18nMsg,AjxMsg,ZMsg,ZmMsg,AjxKeys,ZmKeys,ZdMsg,Ajx%20TemplateMsg.js.zgz
y cualquier persona puede acceder, a la siguiente URL
/res/I18nMsg,AjxMsg,ZMsg,ZmMsg,AjxKeys,ZmKeys,ZdMsg,Ajx%20TemplateMsg.js.zgz?v=091214175450&skin=../../../../../../../../../opt/zimbra/conf/localconfig.xml
y observar todas las credenciales del servidor. Gracias al exploit, crear una cuenta de usuario válida es muy sencillo.

Se recomienda una actualización urgente de todos los servidores Zimbra afectados.

Más información:
exploit-db.com
Leer más

Optimización de Linux con discos SSD

Hace poco adquirí un nuevo portátil, con disco SSD. Era uno de los pocos requisitos, pero casi indispensable para la compra. El precio era la otra gran incógnita.
Tras la instalación del nuevo sistema operativo, en este caso opté por una Linux Mint (XFCE Edition), pude probar de primera mano la velocidad de esta nueva tecnología. Sorprende!
El gran problema de la tecnología SSD es que tiene un límite máximo de escrituras y es por ello que hay que cuidarlo diariamente. Cuando más podamos reducir las escrituras, mejor.
Otro de los aspectos a tener en cuenta es el cambio radical del acceso a disco. Ahora el acceso es directo (al igual que en un pen drive) y no depende de una cabeza lectora. Por lo tanto, el algoritmo de optimización de escritura, que traen todos los kernel's puede ya no ser útil. Es por ello, que en este artículo voy a describir los pasos que seguí a la hora de optimizar la instalación.
  1. Uso de TRIM
    TRIM es una orden especial para trabajar con discos SSD que permite al SO comunicarle al disco qué bloques ya no están en uso, para poder marcarlos como libres. El propósito de esta instrucción es mantener la velocidad del disco durante toda su vida.
    Lo primero que tenemos que saber es si nuestro disco soporta este tipo de tecnología. Se presupone que sí, pero mejor garantizarnos. Para ello,
    shell> hdparm -I /dev/sda | grep TRIM
      *  Data Set Management TRIM supported (limit 8 blocks)
    
    Con usa salida similar a esta, significa que tenéis soporte TRIM. Ahora debemos de montar cada partición que esté sobre el disco SSD con la opción discard. Para ello, editamos el fichero fstab y añadimos y cambiamos las líneas implicadas (ajustar a cada disco y cada partición como corresponda)
    /dev/sda1  /  ext4  errors=remount-ro  0  1
    
    por
    /dev/sda1  /  ext4  discard,errors=remount-ro  0  1
    
  2. Optimización de /etc/fstab
    A mayores de los cambios de discard, en el fichero fstab también podemos tener otro tipo de optimizaciones, como las que suponen noatime y nodiratime. Ambas evitan que se escriban los datos de acceso a ficheros y directorios cada vez que estos se producen. Para un equipo de sobremesa o un portátil, es una buena idea, puesto que no nos interesa tener estos datos.
    /dev/sda1  /  ext4  noatime,nodiratime,discard,errors=remount-ro  0  1
    
    Este cambio, con la mayoría de programas no supone problema alguno. Quizás haya alguno que sí necesite tener estos datos escritos. Si es así, entonces podemos pensar en cambiar ambas opciones por "norelatime", que sí escribe los datos, pero no cada momento que se producen.
  3. Deshabilitando el uso de SWAP
    Con la cantidad de RAM que actualmente traen los equipos, mínimo hablamos de 4Gb de RAM, sino más, es lógico pensar que no se vaya a usar la SWAP. Si optaste por crear una partición SWAP, vamos a desactivarla para que no se use. En caso de que sea necesario su uso en un futuro, el cambio es fácilmente reversible. En el fichero, /etc/sysctl.conf agregamos la línea
    vm.swappiness=0
    
  4. Aprovechamiento de la RAM
    Sí, vamos a optar por llevar todos aquellos directorios temporales sobre los que se hacen muchas pequeñas escrituras a la RAM. Esto hará que se hagan más rápido y también que no se emplee el disco para datos temporales. Esta opción es realmente aplicable a cualquier sistema con mucha RAM, ya que siempre es más rápida que el disco.
    Yo personalmente opté por dejar en memoria los directorios /tmp, /var/tmp y /home/USER/.cache, los que más datos temporales suelen tener. Para ello, escribí en el fichero /etc/fstab lo siguiente.
    tmpfs  /home/javier/.cache  tmpfs  size=1024M,mode=777   0  0
    tmpfs  /tmp                 tmpfs  noatime,mode=1777     0  0
    tmpfs  /var/tmp             tmpfs  noatime,mode=777      0  0
    
    Los directorios que querráis poner en RAM ya es cosa vuestra, simplemente tener en cuenta cuando el equipo se apaga, esos datos se pierden. Leí artículos que hablaban de llegar a poner /var/log en RAM y también los directorios de lock y run. Personalmente esos datos a mi me interesa tenerlos, así que no los pasé a RAM.
  5. Modificar cola de escritura en disco
    Otro de los grandes cambios, y ya el último, es cambiar el plafinicador de escritura a disco. Vamos a pasar de tener el por defecto, deadline a noop.
    shell> cat /sys/block/sdX/queue/scheduler 
    noop [deadline] cfq
    
    Para ello editamos el fichero /etc/default/grub y dejamos la línea tal como sigue,
    ...
    GRUB_CMDLINE_LINUX="elevator=noop"
    ...
    
    Y a continuación, actualizamos el grub para que recoja los cambios.
    shell> update-grub
    
Con todo esto, lo mejor es reiniciar ahora el equipo, para que arranque con todos los cambios. Tras el obligado reboot, tendremos el sistema tal que así,
shell> cat /sys/block/sda/queue/scheduler 
[noop] deadline cfq

shell> mount
/dev/sda1 on / type ext4 (rw,noatime,nodiratime,discard,errors=remount-ro)
tmpfs on /tmp type tmpfs (rw,noatime,mode=1777)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
tmpfs on /var/tmp type tmpfs (rw,noatime,mode=777)
tmpfs on /home/javier/.cache type tmpfs (rw,size=1024M,mode=777)
Y el sistema debería de hacer menos escrituras en disco e ir realmente bien.

Leer más

scp: no se encontró la orden

Tras la instalación de una imagen de CentOS mínima me puse a trabajar hasta que llegó el momento de copiar, vía scp, un fichero. Entonces, como en cualquier distribución GNU/Linux, ejecutas el comando scp y te sale el siguiente error.


shell> scp -r test/ javier@192.168.0.25:
javier@192.168.0.25's password: 
bash: scp: no se encontró la orden
lost connection
Tras lo que parece un intento raro de conexión, termina por decir que el comando no existe. La parte importante del mensaje es la de "scp: no se encontró la orden", o lo que es lo mismo, no se encontró el comando.
Para instalarlo bajo CentOS,
shell> yum install openssh-clients

La entrada scp: no se encontró la orden la puedes leer en Puppet Linux.
Leer más

SaltStack: Uso de grains

¿Os leísteis ya la entrada sobre SaltStack de primeros pasos con Salt? Si no lo habéis hecho, antes de seguir, este es un buen momento para hacerlo aquí.
En esa primera entrada explicábamos como dar de alta un nuevo equipo en el servidor, aceptar su clave y hacer una primera prueba de concepto. Hoy vamos a ver un nuevo punto en la arquitectura de SaltStack: los grains.
Los grains son los datos del sistema del cliente SaltStack. Estos datos son los que nos indican el tipo de sistema operativo, el dominio al que pertenece, la IP, RAM, versión y un largo etc.
Para obtener la salida de grains, podemos hacerlo tal que así,
shell> salt '*' grains.items
  biosreleasedate: 01/01/2006
  biosversion: Bochs
  cpu_flags: fpu de pse tsc msr pae mce cx8 apic sep mtrr...
  cpu_model: QEMU Virtual CPU version 1.1.2
  cpuarch: x86_64
  defaultencoding: UTF-8
  defaultlanguage: en_GB
  domain: mydomain.local
  fqdn: test.server.local
  gpus:
      {'model': 'GD 5446', 'vendor': 'unknown'}
  host: sei
  id: sei.mydomain.local
  ip_interfaces: {'lo': ['127.0.0.1'], 'eth0': ['10.1.100.15']}
  ipv4:
      127.0.0.1
      10.1.100.15
  kernel: Linux
  kernelrelease: 3.9-1-amd64
  localhost: sei
  lsb_distrib_codename: jessie
  lsb_distrib_description: Debian GNU/Linux testing (jessie)
  lsb_distrib_id: Debian
  lsb_distrib_os: GNU/Linux
  lsb_distrib_release: testing
  manufacturer: Bochs
  master: salt
  mem_total: 2012
  nodename: sei
  num_cpus: 1
  num_gpus: 1
  os: Debian
  os_family: Debian
  oscodename: jessie
  osfullname: Debian
  osrelease: testing
  path: /sbin:/usr/sbin:/bin:/usr/bin
  productname: Bochs
  ps: ps -efH
  pythonpath:
      /usr/bin
      /usr/lib/python2.7
      /usr/lib/python2.7/plat-x86_64-linux-gnu
      /usr/lib/python2.7/lib-tk
      /usr/lib/python2.7/lib-old
      /usr/lib/python2.7/lib-dynload
      /usr/local/lib/python2.7/dist-packages
      /usr/lib/python2.7/dist-packages
      /usr/lib/pymodules/python2.7
  pythonversion: 2.7.5.final.0
  saltpath: /usr/lib/python2.7/dist-packages/salt
  saltversion: 0.16.2
  serialnumber: Not Specified
  bash: /bin/bash
Estos datos los podemos emplear dentro de la lógica de Salt, como veremos un poco más adelante y también para diferenciar los equipos en los que queramos ejecutar algo.
Si os acordais, para lanzar una prueba, hacíamos los siguiente
shell> salt '*' test.ping
Con ello, ejecutábamos la función test.ping en todos los equipos que estuviesen aceptados en el servidor. Usando grains, podemos hacer una selección de los mismos sobre la que ejecutar los comandos. Para ello tenemos la opción -G, que la seguimos de la opción por lo que deseamos diferenciar.
shell> salt -G 'os:Debian' test.ping
shell> salt -G 'cpuarch:x86_64' test.ping
Como podéis observar, en la primera se ejecuta el comando sobre todos aquellos equipos con sistema operativo Debian, mientras que en el segundo ejemplo, sobre todos aquellos equipos de arquitectura x86_64.

La entrada SaltStack: Uso de grains la puedes leer en Puppet Linux.
Leer más

Combinación de teclas en consola

Hace ya muchos años que el trabajo día a día lo desarrollo desde la consola de GNU/Linux y aún así no deja de sorprenderme. Hoy quiero compartir con vosotros un atajo de teclado, que personalmente descubrí de casualidad, y que me parece francamente interesante.
La combinación de teclas es ALT + Delete y sirve para borrar palabras completas en consola. Cuando estás tecleando un comando o una ruta y te has equivocado, esta combinación te permite borrar rápidamente toda la palabra.
shell> /home/javier/test.sh
                      # Presionamos ALT + Delete
shell> /home/javier/test
                      # Presionamos ALT + Delete
shell> /home/javier/
                      # Presionamos ALT + Delete
shell> /home/
Aunque puede parecer una chorrada, desde que la conozco me resulta muy cómoda.

Y tú, ¿qué combinaciones sueles usar? Déjalas en comentarios!
Leer más

Actualización de spamassassin en Zimbra

Uno de los procesos que trae Zimbra en el core es spamassassin. Como su nombre indica, es un software que se encarga de analizar y filtrar todos los correos que entran en el servidor y según origen, destino, contenido, etc. clarificarlos como aptos o como correo no deseado. La verdad es que da muy buenos resultados y es un buen software, pero como siempre lo importante es tener las reglas actualizadas. Unas reglas actualizadas pueden evitar muchos problemas de spam masivo.
Vamos a ver por lo tanto cómo actualizar las reglas de spamassassin.
  1. Entrar como usuario zimbra
    Es el primer paso que debemos de llevar a cabo. Accedemos al sistema y cambiamos nuestro usuario al de administrador de Zimbra.
    shell> su - zimbra
    
  2. Actualizar las reglas
    Zimbra incluye spamassassin y también un pequeño script que se encarga de descargar y actualizar los ficheros que sean necesaraios. Para ello, simplemente,
    shell> /opt/zimbra/zimbramon/bin/sa-update -v \
           --updatedir /opt/zimbra/conf/spamassassin \
           --allowplugins \
           --refreshmirrors
    
  3. Reiniciar el demonio
    Una vez terminada la actualización simplemente hacemos un restart del daemon zmamavisdctl de Zimbra y nos aseguramos de que quede arrancado y no tenga ningún problema.
    shell> zmamavisdctl restart
    shell> zmamavisdctl status
    

La entrada Actualización de spamassassin en Zimbra la puedes leer en Puppet Linux.
Leer más

Chrome: Deshabilitar el buscador en la pantalla de inicio

Desde la versión 29 de Google Chrome, éste trae una atractiva nueva página de inicio como la que encabeza esta entrada. Realmente tiene la misma información que siempre y a mayores está integrado el buscador de Google.
No es que me importe demasiado ni me moleste, pero en equipos no muy potentes, todavía no encuentro la explicación, dicha página es complicada de procesar. Esto hace que tarde en arrancar el navegador más de lo deseado. En el otro lado, está la idea de quiero sacarla por que no me apetece tenerla ahí, perfectamente respetable.
Así que ya sea sacarla para aligerar un poco el navegador o por que no te gusta, vamos a ver cómo hacerlo.
Lo primero que necesitamos hacer es abrir una nueva pestaña e ir a la URL chrome://flags/. En esta página, hay que tener cuidado, ya que vamos a tocar parámetros de configuración muy primitivos del navegador, por lo que ten cuidado con lo que tocas. Desde aquí no nos hacemos responsables.
Si eres de los que sigue, entonces busca la entrada "Habilitar la API ampliada de Instant Mac, Windows, Chrome OS" y cambia el valor por defecto que trae e Inhabilitado, tal como se muestra en la imagen lateral.
Tras modificarlo, reinicia el navegador y ya podrás comprobar que ya no está el navegador integrado y vuelves a tener la vista de las páginas más visitadas.
Por cierto, si eres de los que tiene el navegador en inglés, no te preocupes, el procedimiento es el mismo y la clave a buscar es "Enable Instant Extended API Mac, Windows, Chrome OS".

Los usuario de GNU/Linux estamos de enhorabuena, no tenemos que hacer nada, esta actualización no nos afectó :-)
Actualización: Desde la versión 33 de Google Chrome los usuarios de GNU/Linux también tenemos esta nueva pantalla de inicio por defecto.
Actualización: En truco para deshabilitar la visualización de dicha pantalla, desde la versión 33 deja de funcionar y todo el mundo debe verlo (ver comunicado oficial de Google aquí).
Leer más

Zimbra: Purgando automático de mensajes

Aunque hace tiempo que no digo nada de Zimbra, hoy voy a contar un pequeño truco que no está excesivamente documentado. Se trata de modificar el tiempo de retención de los correos en una carpeta, de forma que se purguen los antiguos de forma automática. Aunque para el correo normal no es útil, ya que con los espacios de buzón que hay a día de hoy purgar correos no tiene mucho sentido, sí puede ser útil para carpeta de logs, o la típica carpeta donde se almacenan todos esos correos de "FW:" y "RE:" que la gente te envía.
Propiedades de carpeta
Pues bien, para automatizar este proceso, el usuario debe de dirigirse a la carpeta que le interese en cuestión y sobre ella, ir a las propiedades, como se muestra en la imagen lateral. Pinchando en "Editar propiedades", nos aparecerá la ventana que se muestra abajo, y tendremos que ir a la segunda pestaña, "Retención" y ahí simplemente activar la eliminación de mensajes. A continuación debemos especificar el tiempo máximo de los mensajes que deseemos tener en dicha carpeta. En mi caso, por ejemplo, puse 3 semanas. Puedes elegir entre semanas, meses y años.
Activar tiempo de retención
Lo que hará internamente Zimbra es borrar diariamente aquellos mensajes que estén 'caducados', sin pedir la autorización del usuario, por lo que es muy importante estar seguro de la acción que vamos a llevar a cabo. El correo que se borra no se podrá recuperar (backups aparte...).
Puede que una vez que lo activéis tarde sobre un día en hacer la primera purga de correo. El proceso que se encarga de ello no se ejecuta bajo demanda, sino que se lanza en un determinado horario, así que dependerá del sistema. Tras la primera ejecución podréis ver cómo se han borrado aquellos mensajes que ya no nos eran de interés y desde ahí tendremos siempre la carpeta con el auto-purgado funcionando.

Espero que os haya sido de ayuda.


Leer más

Tracear reglas IPTables

En el mundo de las conexiones de red y de los filtros que IPTables puede hacer, hay veces que se nos puede escapar algún paquete y que no sepamos exactamente qué regla es la que está haciendo el comportamiento anómalo. Si esto pasa, depurarlo puede ser complejo y llegarnos a hacer perder bastante tiempo.
Todos los que alguna vez hemos tocado IPTables solemos usar en la opción de qué hacer con el paquete (-j), la cadena DROP, REJECT, ACCEPT, LOG, CONNMARK, y alguna más que otra más. Sin embargo, si bien es cierto, que por ejemplo LOG y CONNMARK pueden ayudar a depurar, no están pensadas exactamente para eso.

Entonces, ¿cómo seguimos un paquete a través de las reglas?

Pues bien, para hacer exactamente eso, tenemos la opción TRACE, que se carga al incluir el módulo ipt_LOG. Esta nueva regla se usa tal que así,
shell> iptables -A PREROUTING -t raw -p icmp -j TRACE
Y permite rastrear las reglas y tablas por las que pasa un paquete. El formato de salida:
TRACE: tablename:chainname:type:rulenum"
y toda la información queda depositada en syslog, para su posterior análisis. La única condición para habilitarlo es que se aplique sobre la tabla raw.

Desde mi punto de vista es una opción un tanto desconocida, pero muy útil si necesitas ver dónde te has equivocado en el filtrado de los paquetes, especialmente cuando estamos hablando de que IPTables está manejando un elevado número de reglas.
Para más información sobre el uso de TRACE, consultar el man de iptables.

La entrada Tracear reglas IPTables la puedes leer en Puppet Linux.
Leer más

Instalar SaltStack Ubuntu

Hace un tiempo explicamos en este blog cómo instalar un cliente SaltStack sobre un equipo corriendo Debian. Hoy vamos a ver cómo instalar SaltStack en Ubuntu, ya que hay mucha gente que me preguntó cómo hacerlo bajo algo que no sea Debian, especialmente por el tirón que están teniendo las versiones LTS de este sistema operativo.
En realidad es prácticamente igual, pues ambos son de la misma familia. La única salvedad es la forma en la que agregar el repositorio de datos, que en sistemas Ubuntu podemos emplear los repositorios ppa de forma más sencilla. Por lo tanto para instalar SaltStack,
shell> add-apt-repository -y ppa:saltstack/salt
Una vez que tenemos ya es repositorio, únicamente
shell> apt-get update
shell> apt-get install {salt-minion | salt-master | salt-syndic}
Espero que os sea de ayuda.

La entrada Instalar SaltStack minion (Ubuntu) la puedes leer en Puppet Linux.
Leer más

SaltStack: Primeros pasos

Una vez tenemos ya finalizada la instalación de un servidor SaltStack y un cliente o minion, es hora de comenzar a trabajar y ver de qué es capaz.
Lo primero de todo, debemos de tener claro que la comunicación entre cliente y servidor siempre viaja cifrada. El sistema usado es de clave pública--privada, muy similar a SSH, así que el cliente va a generar una clave y tendrá que compartirla con el servidor. Éste luego deberá aceptarla (o no) antes de comenzar a intercambiar datos.
Siempre desde la shell del servidor de Salt, podemos ejecutar,
shell> salt-key -L
Accepted Keys:
Unaccepted Keys:
  salt-client-1.local.net
Rejected Keys:
Para ver un listado de los servidores que ya tenemos aceptados dentro del master y también los que están rechazados. Como veis el nombre del equipo es siempre el que se configura en el minion, y excepto que lo cambiemos manualmente, por defecto cogerá el nombre del equipo, con dominio.
Si tenemos algún equipo pendiente de aceptar, lo que tendremos que ejecutar es,
shell> salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
  salt-client-2.local.net
Proceed? [n/Y] Y
  Key for minion salt-client-2.local.net accepted.

shell> salt-key -L
Accepted Keys:
  salt-client-1.local.net
  salt-client-2.local.net
Unaccepted Keys:
Rejected Keys:
Ahora que ya los tenemos aceptados, ya podemos comenzar a trabajar con los clientes de forma sencilla. Lo más básico, ver que un equipo responde a ping,
shell> salt 'salt-client-1.local.net' test.ping
salt-client-1.local.net:
    True
O que todos responden a ping,
shell> salt '*' test.ping
salt-client-1.local.net:
    True
salt-client-2.local.net:
    True
Aunque también se pueden hacer cosas más concretas e interesantes como,
shell> salt '*' cmd.run 'cat /etc/debian_version'
salt-client-2.local.net:
    7.1
salt-client-1.local.net:
    7.0
U ordenarle que hagan un ping a Google y que nos devuelva el resultado,
shell> salt -L 'salt-client-*' network.ping '8.8.8.8'
salt-client-1.local.net:
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_req=1 ttl=45 time=53.1 ms
    64 bytes from 8.8.8.8: icmp_req=2 ttl=45 time=48.4 ms
    64 bytes from 8.8.8.8: icmp_req=3 ttl=45 time=50.4 ms
    64 bytes from 8.8.8.8: icmp_req=4 ttl=45 time=48.2 ms

    --- 8.8.8.8 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3004ms
    rtt min/avg/max/mdev = 48.211/50.052/53.184/2.019 ms

salt-client-2.local.net:
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_req=1 ttl=45 time=51.1 ms
    64 bytes from 8.8.8.8: icmp_req=2 ttl=45 time=48.3 ms
    64 bytes from 8.8.8.8: icmp_req=3 ttl=45 time=48.3 ms
    64 bytes from 8.8.8.8: icmp_req=4 ttl=45 time=48.1 ms

    --- 8.8.8.8 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3004ms
    rtt min/avg/max/mdev = 48.162/48.991/51.149/1.257 ms
Como creo que vais observando desde la shell del servidor de SaltStack siempre se ejecuta el comando salt, seguido de
  • '*', 'salt-client-1'
    Es el nombre del cliente al que queremos conectar.
    Puede usar comodines o expresiones regulares si nos interesa conectar a uno o más de uno. También se permite conecta a uno o varios equipos según arquitectura, sistema operativo, etc.
  • cmd.run, test.ping
    Es el comando que vamos a ejecutar. Por defecto SaltStack tiene muchos ya definidos, los cuales podemos y debemos usar.
  • '8.8.8.8'
    Son los parámetros opcionales que se le pueden pasar a un comando.
Como primera aproximación no está mal. En próximas entradas iremos viendo cómo hacer más cosillas con SaltStack, cosas que realmente ya será de interés y aportarán algo a la administración de sistemas.

La entrada SaltStack: Primeros pasos, la puedes leer en Puppet Linux.
Leer más

Buenos hábitos en Linux Shell

Desde hace ya muchos años uso GNU/Linux de forma habitual, tanto en el trabajo como a nivel personal. Una de las grandes ventajas de usar este sistema operativo es la facilidad con la que puedes hacer las mismas cosas desde la consola. bash puede y debe ser tu gran aliado. Aunque a primera vista puede resultar feo trabajar en modo consola, sobre todo en los días que corren, la potencia que ello te da es tanta que da pena desaprovecharla.
Hoy os voy a dar algunos consejos acerca de buenos hábitos a la hora de emplear bash. Hay miles, así que este listado irá creciendo.
  1. Creación de directorios
    Es uno de los puntos más conflictivos a la hora de trabajar. El comando está claro, mkdir, pero la forma de crear árboles complicados puede ser muy diferente.
    Un mal ejemplo,
    shell> mkdir tmp
    shell> cd tmp
    shell> mkdir a
    shell> cd a
    shell> mkdir b
    shell> cd b
    shell> mkdir c
    shell> pwd
    ~/tmp/a/b/c
    
    Y ahora un buen ejemplo,
    shell> mkdir -p tmp/a/b/c
    
    Y otro ejemplo práctico más simple y útil que denota la potencia de emplear mkdir correctamente.
    shell> mkdir -p project/{lib,src,doc/{html,pdf},demo/stat}
  2. Descomprimir ficheros
    En GNU/Linux la extensión tar.gz suele ser muy empleada para trabajar con ficheros. Tras descargarla de donde corresponda, generalmente nos queda el fichero en la carpeta habitual de descargas, pero para trabajar con él, toca descomprimirlo. Una mala práctica es descomprimirlo directamente en dicha carpeta, ya que terminamos por dejar el directorio sucio, mientras que una buena práctica es emplear la opción -C del propio comando, que nos permite establecer la ruta completa donde será descomprimido, sin tener que mover el fichero descargado.
    shell> tar zxvf -C /tmp zabbix.tar.gz
    
  3. Entrecomillado de variables
    Hay que tener cuidado a la hora de definir y de entrecomillar una variable o su resultado. Así evitaremos sorpresas futuras.
    shell> mkdir -p test/{a,b}
    shell> ls test
    a  b
    shell> VAR="test/*"
    shell> echo $VAR
    test/a test/b
    shell> echo "$VAR"
    test/*
    shell> echo $VARa
    
    shell> echo "$VARa"
    
    shell> echo "${VAR}a"
    test/*a
    shell> echo ${VAR}a
    test/a
    
  4. Concatenar comandos siempre que sea posible
    Esta es una de las partes en las que más potencia tiene la shell de GNU/Linux, la concatenación de comandos. La salida de un comando puede ser la entrada de otro y así recursivamente, pero hay que tener mucho cuidado con lo que intentamos redirigir y hacerlo con mucha cabeza. Por ejemplo:
    1. No usar cat para lista y grep para filtrar. Filtrar directamente!
      shell> cat file.txt | grep "hola"       # mal
      shell> grep "hola" file.txt             # bien
      
    2. Evitar usar grep y luego contar líneas. Emplea las opciones de grep (-c)!
      shell> grep "hola" file.txt | wc -l  # mal
      shell> grep -v "hola" file.txt       # bien
      
    3. Emplea, siempre que sea posible awk y no grep. Es mucho más rápido!
      shell> ls -l /tmp/a/b/c | grep sep   # mal
      shell> ls -l | awk '$6 == "sep"'     # bien
      
  5. Emplea expresiones de control para concatenar comandos
    Si te interesa que un comando se ejecute siempre que el anterior se haya ejecutado correctamente, hazlo en una única línea. Y también al revés.
    1. La cadena && permite la ejecución si el comando anterior ha devuelto un status 0 (terminó correctamente).
      shell> cd /tmp && tar zxvf ~/archive.tar
      
    2. La cadena || indica que se haga el segundo comando si el primero no tuvo una salida 0 (correcta).
      shell> cd /tmp || mkdir /tmp && tar zxvf ~/archive.tar
      
  6. En scripts, comprueba recursos antes de emplearlo
    Si estás creando un script con acceso a ficheros, comprueba que estos existan antes de usarlos. Te evitarás malas jugadas!
    if [ -d "/Fichero/necesario" ]
    then
       ...
    else
       #fichero no existe!
    fi
    

La entrada Buenos hábitos en Linux Shell la puede leer en Puppet Linux.
Leer más

Spam intenta suplantar Whatsapp

En los últimos días saltó a la palestra un envío masivo de spam por parte de 'alguien' que dice ser WhatsApp y que te informa de que tienes un nuevo mensaje de voz para escuchar. Los correos que se están enviando tienen una forma similar a esta que sigue,
WhatsApp spam
Partamos de que este mail NO tiene ningún tipo de validez, ya que no os lo está enviando la famosa compañía de mensajes, sino que, por lo menos en mi caso, quien lo está enviando es la cuenta service AT casa-soleil DOT de, "WhatsApp Messaging Service" y realmente está saliendo de un host llamado soft-works.housingnetz.net. No deja de ser cuando menos gracioso. Está claro, que no es de mensajería ni tiene nada que ver con ellos, simplemente aprovecha la fama para infectar ordenadores.
Intenté ver un poco más acerca de qué hace la URL maliciosa que indican, pero el host en el que se alojaba parece que ya está desinfectado y no hay rastro de los ficheros ni enlaces a los que mandaba. Por lo que pude leer, la idea era que al pinchar se descargaba un código malicioso, pero no pude saber qué hacía. Si consigo un enlace levantado, actualizaré.
Así que ya sabéis, si veis algún e-mail que provenga de WhatsApp, desconfiar, es muy raro que os lo envíen, especialmente si nunca le habéis dado vuestra dirección. Ante la duda, no tengáis la curiosidad de ver qué es.

La entrada Spam intenta suplantar Whatsapp la puedes leer en Puppet Linux.
Leer más

Sugerencias de exploit para GNU/Linux

Sí, estuve de vacaciones, no literalmente (que más quiera), pero sí me tomé un tiempo sin escribir. Desde el último post ya pasaron días, pero no por eso opté por no seguir, sino que necesité tiempo. Poco a poco volveré a coger el ritmo, según pueda hasta intentar nuevamente actualizar diariamente el blog con cosas interesantes.
Hoy, para volver, os presento un proyecto interesante Linux_Exploit_Suggester, que no es más que un pequeño código escrito el perl que permite, en función del kernel de tu sistema, buscar un listado de exploits que sirvan para vulnerar la seguridad del mismo.
No hace demasiadas comprobaciones a nivel de seguridad, simplemente en función de la salida del comando "uname -r" sugiere aquellos posibles exploits que puedes usar. Supongo que si va teniendo un mínimo de alcance lo desarrollarán más y quien sabe, puede terminar siendo uno de los grandes.
Si le queréis dar la oportunidad, el ejecutable está disponible en github y su uso es muy sencillo.
shell> uname -r
2.6.32-5-xen-686
shell> perl Linux_Exploit_Suggester.pl 

Kernel local: 2.6.32

Searching among 63 exploits...

Possible Exploits:
[+] american-sign-language
   CVE-2010-4347
   Source: http://www.securityfocus.com/bid/45408/
[+] can_bcm
   CVE-2010-2959
   Source: http://www.exploit-db.com/exploits/14814/
[+] half_nelson
   Alt: econet    CVE-2010-3848
   Source: http://www.exploit-db.com/exploits/6851
...
Espero que os pueda resultar útil para comenzar a trastear.

Leer más

Knock, obteniendo subdominios

Este fin de semana pasado tocó culturizarse un poco, y entre todas las noticias relacionadas con la seguridad que leí encontré muchas cosas nuevas e interesantes. Desde recientes fallos de seguridad en Joomla a nuevo software cuando menos digno de probar.
Hoy os quiero hablar de Knock, un pequeño script escrito en Pyhton y que realiza un perfecto escaneo de todos los subdominios existentes para un dominio dado. Ese tipo de información que muchas empresas descuidan y que sirve para descubrir servicios o equipos ocultos e incluso de nombre interno. Knock es por lo tanto una herramienta de auditoria muy eficaz y que a mayores de obtener información, también nos permite jugar un poco con el tema de dominios, como por ejemplo forzar una transferencia de zona y cosas así. Sin embargo, lo que más se sorprendió fue la facilidad para encontrar los subdominios.
Knock está disponible para su descarga desde Google Code y tras descargarla, son sólo tener Python instalado ya podemos comenzar a jugar.
shell> python knock.py -h
Knock v1.5 by Gianni 'guelfoweb' Amato ( http://knock.googlecode.com )

USAGE:
   Scanning with internal wordlist:
      knock [url]
      e.g. knock domain.com
   Scanning with external wordlist:
      knock [url] [wordlist]
      e.g. knock domain.com wordlist.txt
...
Como veis, Knock nos permite realizar un escaneo de un dominio pasándole nosotros un listado de palabras propio. En caso de no proporcionárselo, simplemente usará las palabras por defecto que trae en su 'diccionario'. A continuación os dejo un ejemplo contra un dominio conocido para ver qué podemos averigiar de él.
shell> python knock.py facebook.com
Knock v1.5 by Gianni 'guelfoweb' Amato ( http://knock.googlecode.com )

[+] Testing domain
   www.facebook.com          173.252.110.27     
[+] Dns resolving
         Domain name    Ip address    Name server       
         facebook.com   173.252.X.Z   edge-shv-D-frc1.facebook.com
Found 1 host(s) for facebook.com
[+] Testing wildcard
  Ok, no wildcard found.

[+] Scanning for subdomain on facebook.com
[!] Wordlist not specified. I scannig with my internal wordlist...
  Estimated time about 75.72 seconds

         Subdomain      Ip address    Name server    
       0.facebook.com   173.252.X.Z   edge-shv-M-frc1.facebook.com
     abc.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
   about.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
      ac.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
     ads.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
    apps.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
 arizona.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
arkansas.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
      au.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
      ba.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
   baker.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
...
Tal como se observa, el número de subdominios que nos reporta es cuando menos considerable. Así que espero que os sea de ayuda si tenéis que hacer una auditoria.
Os dejo a continuación también un vídeo donde se ve el funcionamiento de esta herramienta.

La entrada Knock, obteniendo subdominios la puedes leer en Puppet Linux.
Leer más

Bacula (I)

Bacula es un software de copias de seguridad en red de código abierto. Está diseñado para escalar desde una sola máquina a miles, siendo capaz de hacer los backup's en cinta, disco o cualquier otro medio sobre el que GNU/Linux sepa escribir. Sobre algunas características y usos de Bacula ya tuvimos varias entradas, pero hoy vamos a ver Bacula desde un punto de vista más teórico.
El software Bacula está compuesto de 5 servicios principales que detallamos a continuación.
  1. Bacula Director Daemon
    Bacula Director es el centro neurálgico de Bacula y el que controla todas las operaciones: copia de seguridad, recuperación y verificación de datos. En él están, por ejemplo, la ejecución programada de cada acción, también regula la gestión de los grupos de medios y controla el archivo de almacenamiento.
    Para establecer comunicación con él, el administrador tiene acceso a una consola.
  2. Bacula Catalog
    Bacula Catalog está formado por el programa de software responsable de mantener los índices de los archivos y por la base de datos de todos los archivos de copia de seguridad. Son estos catálogos los que permiten al administrador o al usuario encontrar y restaurar cualquier fichero rápidamente. Para ofrecer estos servicios de catálogo, Bacula se apoya en software de base de datos. Actualmente tiene soporte para MySQL, PostgreSQL y SQLite. Uno de ellos es necesario para la instalación de Bacula.
  3. Bacula Storage Daemon
    Bacula Storage es la parte software que se encarga del almacenamiento y la recuperación de los archivos en los medios de copia de seguridad. En otras palabras, es el daemon que se encarga de leer y escribir en las cintas u otras soporte de almacenamiento.
  4. Bacula File Daemon
    Bacula File, también conocido como cliente Bacula, es el programa de software que se instala en todos los equipos de los que deseamos tener una copia de seguridad. Es específico del sistema operativo en el que se ejecuta y se encarga de proporcionar los archivo cuando Bacula Director los solicita.
  5. Bacula Console
    Bacula Console es el programa que permite al administrador o al usuario comunicarse con Bacula Director. La consola está disponible en la interfaz basada en texto (interfaz TTY), pero existen más versiones que permiten interactuar con el Directror de forma más gráfica.
Bacula Services Description

Características

A continuación vamos a ver algunas de las características principales de Bacula como software de backup. Aunque existen muchos programas para la realización de backup's en red, Bacula destaca por lo siguiente.
  • Seguridad
    • Verificación de archivos previamente catalogados.
    • Autenticación con contraseña CRAM-MD5 entre cada componente.
    • Cifrato TLS/SSL de comunicaciones entre cada componente.
    • Posibilidad de encriptación de los datos de un cliente concreto o de todos en función de una clave propia del cliente.
  • Soporte de múltiples sistemas operativos
    • Programado para manejar nombres de archivos y mensajes de longitud arbitraria.
    • Posibilidad de compresión GZIP por parte del cliente en los archivos a transmitir si así es requerido.
    • Soporte para ACL's y atributos extendidos en la mayoría de sistemas operativos.
    • Control de acceso a la consola diferenciado por usuario, lo que permite que cada uno acceda únicamente a sus datos.
    • Soporte para archivos de más de 2 Gb.
    • Soporte para arquitecturas de 64 bits.
    • Apoyo ANSI y etiquetas de cintas IBM.
    • Copia de seguridad consistente de archivos abiertos para Win32 (WinXP, Win2003 y Vista), pero no en Windows 2000.
      Usa para ello, Volume Shadow Copy (VSS).
    • Soporte para rutas/nombres de archivos de hasta 64K en máquinas Win32.
      Sin límite en Unix/Linux.
  • Control de trabajos
    • Copia de seguridad en red desde un punto centralizado.
    • Incluye planificador de ejecución de tareas.
    • Programación de varios trabajos simultáneamente.
    • Permite la ejecución de un trabajo a varios a la vez.
    • Secuancias de trabajo marcadas con prioridades.
    • Consola de comunicación con el proceso principal.
  • Restauración
    • Recuperación de uno o más archivos seleccionados de forma interactiva, desde la última copia de seguridad o desde una seleccionada con fecha y hora concretas.
    • Recuperación de un sistema completo a hardware nuevo. Está especialmente automatizado para sistemas Linux y Solaris.
    • Posibilidad de restaurar la base de datos del catálogo de forma sencilla.
    • Capacidad para volver a generar la base de datos de catálogo mediante el escaneo de los volúmenes gracias a bscan.
  • Catálogo SQL
    • Catálogo de base de datos para almacenar volúmenes, pools, trabajos y archivos.
    • Soporte para MySQL, PostgreSQL, SQLite.
    • Soporte de consultas SQL a los catálogos.
  • Volúmenes y Pools
    • Soporte de etiquetas en volúmenes, que evitan la sobreescritura accidental.
    • Todos los datos de backup pueden ir al mismo volumen. No se discierne por cliente o sistema operativos. Es el catálogo el que controla qué cosa está en cada lugar. Así el volumen se aprovecha mejor y ofrece mayor rapidez de backup.
    • Cambio de volumen automáticamente cuando el que está en uso está marcado como lleno.
    • Pools y volúmenes ofrecen flexibilidad gracias a la configuración de los mismos. Se permite diferenciar por meses, semanas, días, cliente, etc.
    • El formato de los datos es independiente de la máquina cliente.
  • Soporte para la mayoría de los dispositivos de almacenamiento
    • Soporte para función "autochanger", empleando para ellos una shell y el listado de comandos para mtx. Gracias a ellos soporta prácticamente todos las librerías.
    • Soporte para códigos de barras en "autochanger".
    • Etiquetado automático de cintas por códigos de barras.
    • Soporte para múltiples unidades de carga automática.
    • Seguridad en escritura de datos al realizar un checksum de los datos escritos en cada volumen. Aproximadamente cada 64Kb.
    • Soporte para la miegración de datos. Permite mover datos entre diferentes pools o volúmenes y también el guardado de datos en DVD.

Ventajas

  • Bacula File Daemon, un cliente por cada máquina, lo que facilita la conexión y el backup de datos de cada puesto.
  • Soporte para atributos del sistema de ficheros, lo que garantiza que los datos se restauren con los mismos permisos que tenían en origen.
  • Manejo de copias de seguridad de varios volúmenes.
  • Uso de base de datos para almacenar el estado y los fichero de los que hay copia.
  • Auto-purgado de la base de datos, lo que facilita el mantenimiento de la misma.
  • Velocidad de backup y de restauración de datos.
  • Soporte de mensajes de aviso y de estado de operaciones, lo que facilita saber si algo sale mal.
  • Interfaz de comunicación sencilla y por usuario. Existen también clientes web más visuales.
La entrada Bacula (I) la puedes leer en Puppet Linux.
Leer más

Actualización de seguridad para Joomla

Descripción:

Vulnerabilidad crítica en el Core de Joomla.
Afecta a versiones <= 2.5.13 y <= 3.1.4.

Fecha:

31/07/2013

Detalles:

Se ha detectado un fallo de seguridad que permite vulnerar las restricciones de subida de ficheros.
Se hace un filtrado incorrecto de los datos, lo que permite subir deferentes tipos de fichero y extensiones (no permitidos) al site.

Solución:

Actualizar a las versión 2.5.14 o 3.1.5.

Referencias:

Joomla security
Leer más

Simular conexión de agente Zabbix con zabbix_sender

Ya hacía tiempo que no escribía nada referente a algún truco de Zabbix y hoy ya tocaba. Pues bien, como muchos de vosotros sabréis, Zabbix tiene el comando zabbix_sender que sirve para enviar al servidor el valor de un item que sea de tipo trapper. Trapper es un tipo especial de items en los cuales el servidor Zabbix no pide su valor, sino que alguien debe enviarlos. Alguien que no sea el agente de Zabbix, puesto que estos no se solicitan. Para enviar valores a Zabbix, la forma más sencilla es emplear el propio zabbix_sender.
Hoy lo que nos interesa es ver cómo podemos hacer para que zabbix_sender actualice un valor que sea de tipo "zabbix agent". Como ya dijimos, sólo se puede actualizar valores de tipo trapper. Esto es así por que en el código así está escrito.
La idea es aplicar un pequeño parche al código del zabbix_sender para que éste admita un tipo especial de envío que sea "zabbix agent". Si vemos un poco el código, cada uno de los tipos que admite Zabbix se corresponde con una variable previamente definida. Alterar el código por lo tanto para que se permita el envío de otro tipo de item no "debe ser muy complicado".
El problema está en que los datos que envía el zabbix_sender al llegar al servidor identificados como trapper y el destino es un item de tipo "zabbix agent" son automáticamente truncados. Para evitar este problema, debemos hacer que zabbix_sender envíe la comunicación simulando ser un agente Zabbix.
Os dejo el parche, que podéis descargar desde aquí, y que aplica los cambios necesarios.
Gracias a esta pequeña modificación, podemos ya emplear zabbix_sender para actualizar valores de tipo "zabbix agent", con simplemente añadir en la línea de comandos la opción "-a".
shell> zabbix_sender -h
Zabbix Sender v2.0.6 (revision 35158) (22 April 2013)

usage: zabbix_sender [-Vhv] -a {[-zpsI] -ko | [-zpI] -T -i f -r} [-c f]

Options:
...
Other options:
  -h --help            Give this help
  -V --version         Display version number
  -a --active-agent    Simulate a Zabbix agent in active mode

shell> zabbix_sender -a -s locahost -k system.uname -o "My value"
info from server: "Processed 1 Failed 0 Total 1 Seconds spent 0.000010"
sent: 1; skipped: 0; total: 1
Lógicamente, sentiros libres de modificarlo.
La entrada Simular conexión de agente Zabbix con zabbix_sender la puedes leer en Puppet Linux.
Leer más

Interfaces de red en tcpdump

tcpdump es uno de los mejores programas que existen para capturar tráfico de red. Tanto la versión para Windows, como especialmente la versión de GNU/Linux funcionan perfectamente y permiten poner uno (o varios) interfaces de red en modo promiscuo para capturar el tráfico de red que recibe. Sin embargo, si estamos conectados a un equipo con varias tarjetas de red, quizás saber cómo se llaman o en cual poner a escuchar nuestro tcpdump puede resultar más complicado. Si echamos un vistazo al manual del programa, podemos ver cómo existe una opción (-D) que nos lista todas las interfaces de red disponibles.
shell> tcpdump -D
1.eth0
2.eth0.20
3.eth0.30
4.usbmon1 (USB bus number 1)
5.eth1
6.usbmon2 (USB bus number 2)
7.usbmon3 (USB bus number 3)
8.eth2
9.any (Pseudo-device that captures on all interfaces)
10.lo
En la salida que vemos, se puede observar el listado de interfaces que tiene un equipo. En ellas, incluso de pueden ver los interfaces virtuales que existen sobre una de las tarjetas. tcpdump también permite escuchar sobre interfaces virtuales. También destaca los puertos USB del equipo, aunque de esto ya hablamos en otro artículo.
Existe también un interfaz especial denominado any y que, como dice su descripción es un pseudo-interfaz que captura en todas las interfaces. En caso de que queramos escuchar en todas las interfaces de red del equipo, any será nuestra tarjeta.
shell> tcpdump -i any

El artículo Interfaces de red en tcpdump lo puedes leer en Puppet Linux.
Leer más

Curso de Seguridad Ofensiva

W. Owen Redwood profesor de la Universidad del Estado de Florida ha publicado el material de la clase que imparte junto a Prof. Xiuwen Liu sobre seguridad ofensiva.
Esta clase está pensada para ser impartida en unas 15 semanas, aproximadamente, a un ritmo de una lección semanal. Os dejo aquí el temario de las clases por si alguien se anima y los link's a los vídeos de Youtube de aquellas clases que los tienen.
  1. Intro / Overview
    1. Intro, Ethics, & Overview
    2. Linux Overview
  2. Overview / Code Auditing
    1. Windows Overview
    2. Rootkits; Code Auditing
  3. Reverse Engineering Workshop Week
    1. x86 Reverse engineering
    2. x86 Reverse engineering 2
  4. Exploit Development
    1. Fuzzing and Exploit Development 101
    2. Shellcode and Exploit Development 102
  5. Exploit Dev / Networking
    1. Exploit Development 103: SEH Exploitation, Heap Sprays, and Executable Security Mechanisms
    2. Networking 101: Data Layer, Link Layer, and IP layer
  6. Networking / Web Application Hacking
    1. Networking 102: TCP layer, Important Protocols, Services, Portscanning, ARP
    2. Web application Hacking 101
  7. Web Application Hacking
    1. Web Application Hacking 102: Big picture of topics so far, SQLi, XSS
    2. Web Application Hacking 103: SSL attacks, advanced techniques
  8. Web Application Hacking / Exploit dev
    1. Web Application Hacking 104: Exploit Development 104
    2. Midterm review: Exploit Development 105 (ROP)
  9. Special Topics
    1. The Modern History of Cyber Warfare
    2. Social Engineering
  10. Metaspl0it
    1. Metasploit
  11. Post Exploitation and Forensics
    1. Meterpreter and Post Exploitation
    2. Volatility and Incident Response
  12. Physical Security
    1. Physical Security Workshop: Lockpicking, USB mischief, and BacNET/SCADA system security
  13. Malware / Student Presentations
    1. Advanced Malware Techniques
  14. Student Presentations
Casi todas las clases están grabadas en vídeo, pero sino siempre están a mano las diapositivas. A mayores, según la clase también está disponible más material y link's de interés.
A mayores de todo este material, también están disponibles los deberes del curso. Para aquellos interesados en hacerlos, los pueden ver desde aquí,

Si te gusta la seguridad informática, no dudes en ver estas clases!
Leer más

Bind9, denegación de servicio

ICS, Internet System Consortium, encargada de desarrollar el famoso servidor DNS BIND ha liberado una nueva versión del mismo que corrige un fallo de seguridad. Este fallo de seguridad puede provocar una denegación de servicio ante una consulta especialmente manipulada.
Dicha vulnerabilidad, calificada como crítica, tiene asignado el código CVE-2013-4854 y fue reportada por Maxim Shudrak a través del programa de Zero Day Initiative de HP. Afecta a las versiones de las ramas 9.7, 9.8 y 9.9 del servidor. La rama 9.6 no está afectada y la rama 9.10 tampoco. Para el resto de las ramas, existe ya un parche oficial, a excepción de la 9.7, que ICS avisó en un comunicado que no aplicaría el parche por estar descontinuada.
El fichero que contiene el fallo es el lib/dns/rdata/generic/keydata_65533.c y el parche aplicado es muy sencillo,
...
    isc_buffer_activeregion(source, &sr);
-   if (sr.length < 4)
+   if (sr.length < 16)
       return (ISC_R_UNEXPECTEDEND);
...
Para servidores Debian en versión stable o oldstable ya está el parche aplicado y sólo debemos actualizar para no vernos afectados.
Más información:
La entrada Bind9, denegación de servicio la puedes leer en Puppet Linux.
Leer más

Compilar Zabbix-Agent para Windows

El software de monitorización Zabbix es estupendo y ya hablamos de él más veces en este blog. Una de las ventajas más grandes que presenta es que tiene un agente (pequeño código escrito en C) que permite tener "algo" en los equipos para enviar información del estado de los mismos. Quien dice del estado de los mismos, también dice del poder ejecutar comandos remotos, por ejemplos.
Desde la web oficial del proyecto nos ofrecen siempre una versión para sistemas Unix y otra para sistemas Windows y a mayores todo el código fuente. Si nos interesa modificar algo del agente, o simplemente compilar nuestras propias fuentes, hacerlo en sistemas GNU/Linux es muy simple, pero la cosa cambia en entornos Windows.
Hoy vamos a explicar cómo compilar Zabbix para Windows. Para ello partimos de una instalación de Windows 7 sobre la que instalaremos el Windows SDK for Windows 7 (disponible aquí) y también el Visual Studio 2010 Express (disponible para descarga aquí). Cuando tengamos ambos paquetes instalados, simplemente descargamos el código fuente de Zabbix y los extraemos en una carpeta. Para simplificar todo, yo de dejaré en C:\zabbix-2.0.6 (última versión estable a fecha de escribir esta entrada).
  • Versión de 32 bits
    Esta es la versión para la mayoría de los Windows, así que será por la que empecemos. Antes de nada, debemos de establecer las variables de entorno que necesitamos. Para ello ejecutamos,
    msdos> C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat
    
    Una vez tengamos ya el entorno listo, simplemente debemos navegar hasta la carpeta que contiene el proyecto y compilarlo. Para ello, todo desde msdos,
    msdos> cd "C:\zabbix-2.0.6\build\win32\project"
    msdos> copy ..\include\config.h ..\..\..\include\
    msdos> nmake Makefile_agent
    msdos> nmake Makefile_get
    msdos> nmake Makefile_sender
    
  • Versión de 64 bits
    Si vamos a la carpeta del proyecto de 64 bits, nos manda a la carpeta de 32, puesto que el código es el mismo. La única diferencia a la hora de compilar este entorno es que debemos de cargar las variables del entorno de 64. Así que,
    msdos> C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars64.bat
    
    Una vez tengamos esto, el resto de pasos sin idénticos a la versión de 32, por lo que no los vamos a repetir.
Si durante la compilación os salta el siguiente error,
...
zbxconf.c
 rc.exe /d "ZABBIX_AGENT" /d _WINDOWS /d "NDEBUG" /d "_VC80_UPGRADE=0x0600
/l 0x419 /fo"zabbix_agent.res" resource.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
Copyright (C) Microsoft Corporation.  All rights reserved.

resource.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\rc.exe"' : código devuelto '0x1'
Stop.
La solución es editar el fichero zabbix-2.0.6/build/win32/project/resource.rc y en la línea 10 cambiar,
...
//
#include "afxres.h"
...
por
...
//
#include "windows.h"
...
Ahora volvemos a compilar y ya todo debería de ir perfectamente. Al finalizar la compilación nos dejará los nuevos binarios en la carpeta bin de la raíz.

La entrada Compilar Zabbix-Agent para Windows la puedes leer en Puppet Linux.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios