9.11.06

OSSTMM - El manual de referencia para el auditor de seguridad


A la hora de asegurar un sistema cada administrador utiliza sus aplicaciones de detección de intrusos preferida, una configuración particular, etc. En realidad no se suele seguir una metodología contrastada más que la de la propia experiencia.
La asociación ISECOM además de formar a auditores de seguridad en sus conocidas "Hackers High School", mantienen actualizado el Open Source Security Testing Methodology Manual, disponible su última versión pdf en cristiano se puede descargar aquí.

7.11.06

Sistemas multimonitor con Xorg

Instalar un sistema multimonitor con Xorg es realmente sencillo. En este ejemplo me baso en un equipo con Debian Etch instalada y una tarjeta gráfica ATI Radeon 9200 AGP.

Lo primero es instalar la extensión Xinerama, que nos permitirá expandir nuestro escritorio:

apt-get install libxinerama1

Luego debemos clonar la configuración de nuestra tarjeta(s) y la del(os) monitor(es), en la que nuestro fichero /etc/X11/xorg.conf quedaría de la siguiente forma (he obviado los parámetros no significativos):

Section "Device"
#Salida VGA que ya habia configurado Xorg durante la instalacion
Identifier "ATI Technologies Inc RV280 [Radeon 9200]"
Driver "ati"
BusID "PCI:1:0:0"
VideoRam 65536
#A continuacion le indicamos que no clone la imagen
Option "Clone" "false"
#Indicamos el orden las salidas
Option "MonitorLayout" "CRT,LFP"
#Agregamos un identificador
Screen 0
EndSection

Section "Device"
#Salida DVI que debemos crear copiando la configuracion
#de la primera salida
Identifier "ATI DVI"
Driver "ati"
BusID "PCI:1:0:0"
#Agregamos un identificador
Screen 1
EndSection

Section "Monitor"
#Configuracion realizada por Xorg
Identifier "Monitor genérico"
Option "DPMS"
HorizSync 30-70
VertRefresh 59-76
EndSection

Section "Monitor"
#Creamos un nuevo dispositivo, en mi caso un monitor CRT
Identifier "Monitor CRT"
Option "DPMS"
HorizSync 30-70
VertRefresh 59-76
EndSection

Section "Screen"
#Configuración generada por Xorg
Identifier "Default Screen"
Device "ATI Technologies Inc RV280 [Radeon 9200]"
Monitor "Monitor genérico"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
EndSection

Section "Screen"
#Configuración creada para el monitor CRT que irá a la derecha
Identifier "RightScreen"
Device "ATI DVI"
Monitor "Monitor CRT"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1152x864" "1024x768" "800x600" "640x480"
EndSubSection

EndSection

Section "ServerLayout"
#Sustituímos el ServerLayout por defecto por este otro que cargue
#los dos monitores.
Identifier "Dual Monitor"
Screen 0 "Default Screen" 0 0
Screen 1 "RightScreen" RightOf "Default Screen"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
Option "Xinerama" "true"
EndSection

Por último nos queda reiniciar el servidor Xorg y disfrutar de nuestro nuevo monitor expandido.

Python: Backup de una carpeta contra un servidor FTP remoto

Sin lugar a dudas para cosas serias se debe utilizar rsync pero cuando tienes un equipo poco accesible y necesitas mover los ficheros de un directorio a un servidor FTP, esta porción de código puede resultar útil:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import glob
import os
import string
from ftplib import FTP

#Path donde se encuentran los ficheros

rutaFicheiros = ?/home/jose/Documentos/*?

#Parametros de la conexion
ipServFTP = ?194.224.52.4?
ftpUser = ?jose?
ftpPasswd = ?mypasswdRocks?
ftpDir = ?/Backups/Documentos?

def atopaFicheiros(ruta):
?'?
Lista todos los ficheros de una ruta dada y devuelve
una lista con todos los paths absolutos.
?'?
listadoPaths = []
if len(ruta) > 0:
listadoPaths = glob.glob(ruta)
else:
pass
return listadoPaths

def subeFicheirosFTP(ip,usuario,passwd,directorio,ficheiros):
?'?
Sube un listado de ficheros dado a un directorio de un
servidor ftp remoto.
?'?
print ?Estableciendo conexion??
conexion = FTP(ip)
conexion.login(usuario,passwd)
conexion.cwd(directorio)
print ?Subiendo ficheiros??

for i in ficheiros:
try:
ficheiroLocal = open(i,?rb?)
nomeFicheiro = string.split(i,?/')[1:]
conexion.storbinary(?STOR ? + nomeFicheiro, ficheiroLocal, 1024)
ficheiroLocal.close()
pipe = os.popen(?rm ?? + i +???)
except:
print ?Non se puido subi-lo arquivo ? + i
conexion.close()
conexion = FTP(ip)
conexion.login(usuario,passwd)
conexion.cwd(directorio)
print ?Conexion re-establecida?

conexion.close()

if __name__ == ?__main__?:
listaXmls = atopaFicheiros(rutaFicheirosXML)
subeFicheirosFTP(ipServFTP,ftpUser,ftpPasswd,ftpDir,listaXmls)

Truco Python: romper una cadena en subcadenas de X tamaño

Con la siguiente función vamos a conseguir dividir un string en X substrings de un tamaño dado (muy útil por ejemplo para completar formularios). Es una función muy recurrida, al menos por mi:

def splitCount(s, count):

return [?".join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]
Para los que empezais con Python, la forma de usarla sería:

myString = ?Esta cadena de pruebas la vamos a romper en cachitos?
LengthOfPieces = 6
a = splitCount(myString, LengthOfPieces)
print a

Grabar imágenes CD/DVD de Nero en Linux

Para los que tengais la necesidad de grabar imágenes de Nero en Linux lo único que necesitais es convertirlas a formato .iso. Para ello hay una utilidad preciosa llamada nrg2iso:

jose@tatooine:~$ apt-cache search nrg2iso
nrg2iso - Extracts ISO9660 data from Nero ?.nrg? files
jose@tatooine:~$ sudo apt-get install nrg2iso
Una vez instalado la sintaxis es realmente sencilla:

nrg2iso imagen.nrg imagen.iso

Configurar un RAID con mdadm

El funcionamiento de mdadm es similar al de otras herramientas como raidtools (kernel 2.4).
Para crear un dispositivo RAID, debemos modificar el fichero de configuración de mdadm en /etc/mdadm.conf:

DEVICE /dev/dispositivo(s)
ARRAY /dev/md(id_array) devices=/dev/disco1,/dev/disco2?.

Ejemplo de configuración para un array de dos discos /dev/sda y /dev/sdb:

DEVICE /dev/sd[ab]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1

A continuación debemos crear el array utilizando la configuración que hemos guardado. En este ejemplo crearemos un array en modo mirroring:

$mdadm ?create /dev/md0 ?level=raid1 ?raid-devices=2 /dev/sda1 /dev/sdb1

Ahora solo nos queda formatearlo y comenzar a utilizarlo:

$mkfs.ext3 /dev/md0

Para establecer un punto de montaje en el inicio de sistema debemos crearle una entrada en /etc/fstab:

/dev/md0 / ext3 defaults 0 0

Soporte para RAID por software en Linux

El soporte de RAID por software es soportado por el kernel de Linux sin mayores problemas, en todos los modos de RAID que deseemos, combinaciones inclusive. También se soporta el uso de uno o más ?spare disks?, utilizados como ?discos reserva? en caso de que alguno de los discos del RAID falle. Cuando el sistema operativo detecta un fallo de discos, automáticamente comienza la réplica de datos al nuevo disco, minimizando la posibilidad de pérdida de datos y dándonos un tiempo adicional para sustituír el disco averiado.

Generalmente las distribuciones incluyen un módulo precompilado para soportar RAID por software, aunque puede estableceser de forma manual recompilando el kernel de forma que se active la opción:

Multiple devices driver support (RAID and LVM) (CONFIG_MD) [Y/n/?] y
RAID support (CONFIG_BLK_DEV_MD) [M/n/y/?] y
Linear (append) mode (CONFIG_MD_LINEAR) [M/n/y/?] y
RAID-0 (striping) mode (CONFIG_MD_RAID0) [M/n/y/?] y
RAID-1 (mirroring) mode (CONFIG_MD_RAID1) [M/n/y/?] y
RAID-4/RAID-5 mode (CONFIG_MD_RAID5) [M/n/y/?] y

Una vez compilado, para certificar que el módulo se ha cargado podemos revisar el log de arranque:

jose@pequerrecho:~$ dmesg | grep md
[17179599.548000] md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27
[17179599.548000] md: bitmap version 4.39

Este mensaje nos indica que el módulo está cargado y listo para detectar dispositivos RAID. Durante el proceso de autodetección, el kernel trata de buscar particiones marcadas como 0xFD (Linux RAID autodetect). Con fdiks podemos ver y/o editar los tags de una partición:

jose@pequerrecho:~$ fdisk -l /dev/hda
Disk /dev/hda: 100.0 GB, 100030242816 bytes255 heads, 63 sectors/track, 12161 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 12095 97153056 fd Linux raid autodetect
/dev/hda2 12096 12160 522112+ fd Linux raid autodetect