jueves, 19 de marzo de 2009

Tips para Linux que todos deberiamos saber. Parte XI

Continua la serie de tips para linux que deberíamos saber, esta vez con parte XI y final de la serie.
Si deseas puedes ver las otras partes de la serie:



#51 Usando rsync sobre ssh


SSH es ideal para hacer copias remotas de partes de un sistema de archivo, pero rsync es mucho mejor para mantener esos archivos sincronizados entre 2 maquinas. Para ejecutar rsync sobre ssh hay q usar la opcion -e, así:

rsync -ave ssh servidor:/home/ftp/pub/ /home/ftp/pub/

Nota la ruta / en las especificaciones del archivo desde la fuente (servidor). En la especificación de la fuente, el camino / le dice a rsync que copie el contenido del directorio, pero no el directorio mismo. Para incluir el directorio como el nivel mas alto de lo que esta siendo copiado, dejar fuera la /:

rsync -ave ssh bcnu:/home/six .

Esto mantendrá una copia del directorio ~/six/ sobre rsync con cualquiera que este presente en bcnu:/home/six/. Por defecto, rsync solo copiara los archivos y directorios, pero no los remueve de la copia destino cuando son removidos de la fuente. Para mantener las copias exactas, incluye la opcion --delete:

rsync -ave ssh  --delete servidor:~one/reports .

Ahora cuando los reportes antiguos son removidos de ~one/reports/ en servidor, también son removidos de ~six/public_html/reports/ en la version sincronizada, cada vez que se ejecute este comando. Si ejecutas un programa similar con cron, no usar la opcion v. Esto mantendrá la salida ( a menos que rsync tenga un problema al ejecutarse, en tal caso recibirás un correo con la salida del error). Usando SSH como transporte para rsync tienes la ventaja de encriptar la data sobre la red y también de usar cualquier relación de confianza establecida usando las claves de SSH.

#52 Escaneado de activos

Normalmente cuando la gente piensa en usar nmap, asumen que es usado para conducir cierto reconocimiento de red para prepararse para un ataque. Pero nmap es una poderosa herramienta que también puede usarse como white hat. Por ejemplo, un escaneado de conexión TCP simple puede ser conducido sin necesidad de privilegios de root:

nmap rigel

nmap también puede escanear rangos de direcciones IP especificando el rango o usando notaciones CIDR:

nmap 192.168.0.1-254
nmap 192.168.0.0/24

nmap puede proveer mucha mas información si se ejecuta como root. Puede usar paquetes especiales para determinar el sistema operativo de una maquina remota
usando la opcion -O. Adicionalmente, puedes escanear TCP medio abierto usando la opcion -sS. Cuando haces un escan medio abierto, nmap enviara un paquete SYN al servidor remoto y espera recibir el ACK, si recibe el ACK, sabrá que el puerto esta abierto.

La diferencia desde una comunicación TCP de tres vías normal, donde el cliente enviara un paquete SYN y luego envía un ACK de nuevo al servidor una vez que ha recibido el ACK inicial del servidor. Atacantes usan por lo general esta opcion para evitar tener sus escaneados logeados en la maquina remota.

nmap -sS -O rigel

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on rigel.nnc (192.168.0.61):
(The 1578 ports scanned but not shown below are in state: filtered)
Port State Service
7/tcp open echo
9/tcp open discard
13/tcp open daytime
19/tcp open chargen
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
37/tcp open time
79/tcp open finger
111/tcp open sunrpc
512/tcp open exec
513/tcp open login
514/tcp open shell
587/tcp open submission
7100/tcp open font-service
32771/tcp open sometimes-rpc5
32772/tcp open sometimes-rpc7
32773/tcp open sometimes-rpc9
32774/tcp open sometimes-rpc11
32777/tcp open sometimes-rpc17
Remote operating system guess: Solaris 9 Beta through Release on SPARC
Uptime 44.051 days (since Sat Nov 1 16:41:50 2003)
Nmap run completed -- 1 IP address (1 host up) scanned in 166 seconds

Con la detección del sistema operativo habilitada, nmap ha confirmado que el OS es Solaris, pero ahora también sabras que es probable que es probable que sea la version 9 sobre un procesador SPARC.

Una característica que puede ayudarte a mantener un registro de tu red es la capacidad de nmap para mostrar una salida XML. Se activa usando la opcion -oX asi:

nmap -sS -O -oX scandata.xml rigel

Esto es especialmente útil cuando escaneas un rango de direcciones IP o toda tu red, porque pones toda la información recolectada en un archivo XML que puedes ser insertado en una base de datos. Así es mas o menos la salida del archivo XML:

"



"

nmap es una poderosa herramienta. Usando la capacidad de salida XML, un poco de código y una base de datos, puedes crear una herramienta mas poderosa aun que puede monitorear servicios o maquinas no autorizadas en tu red.

#53 Copia de seguridad de tu sector de arranque

Para los que tienen un proceso dual de arranque u otros procesos mas en el sector de arranque, seria bueno realizar una copia de seguridad (backup) de dicho sector, se puede hacer así:

dd if=/dev/hda of=bootsector.img bs=512 count=1

Obviamente tendrías que cambiar tu dispositivo para que refleje tu disco de arranque. También, se muy cuidadoso por que podrías dañar tu disco duro. Para restaurar la copia usa:

dd if=bootsector.img of=/dev/hda

#54 Protege tus logs

Si alguna vez atacan tu sistema una buena forma de saber que es lo que el atacante ha hecho, por donde ha entrado, etc es viendo los logs del sistema, pero si el atacante borra los rastros de su ataque sera mas difícil saber que es lo que paso.

Es ahí donde los atributos de archivos entran para salvar el día. Tanto Linux como BSD tiene la habilidad de asignar atributos extras a los archivos y directorios. Esto es diferente del esquema de permisos de Unix en el cual la configuración de un archivo aplica universalmente a todos los usuarios del sistema y ellos afectan el acceso al archivo a un nivel mas profundo que los permisos del archivo o ACL.

En Linux, puedes ver o modificar los atributos que están configurados para un archivo usando los comandos lsattr y chattr, respectivamente. Hasta el momento esto esta disponible solo usando el sistema de archivo ext2 y ext3. También hay parches disponibles para soportar atributos en XFS y ReiserFS. Uno de los atributos mas útiles para proteger los archivos es append-only (solo añadir). Cuando este atributo es configurado, el archivo no puede ser borrado y solo se permitirá escribir al final del archivo.

Para configurar el atributo append-only en Linux ejecuta este comando:

chattr +a  "nombre archivo"

Mira como el atributo +a funciona: crea un archivo y configura su atributo append-only:

touch /var/log/logfile
echo "append-only no configurado" > /var/log/logfile
chattr +a /var/log/logfile
echo "append-only Configurado" > /var/log/logfile
bash: /var/log/logfile: Operacion no permitida

Obviamente un intruso que haya logrado obtener los privilegios de root podría darse cuenta de los archivos que ha usado y y remover el atributo append-only de nuestros logs. Pra prevenir esto, debes deshabilitar la opcion para remover el atributo append-only. Para lograr esto en Linux, usa su mecanismo de capacidad.

El modelo de capacidad de Linux divide los privilegios otorgados al root y te permite deshabilitarlos selectivamente. Para prevenir que un usuario remueva el atributo append-only de un archivo, debes remover la capacidad CAP_LINUX_IMMUTABLE. Cuando esta presente en el sistema, esta capacidad permite modificar el atributo append-only. Para remover esta característica del sistema, puedes usar la utilidad lcap (http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2).

Luego de descargarla del enlace anterior, la desempaquetas y compilas con este comando:

tar xvfj lcap-0.0.3.tar.bz2 && cd lcap-0.0.3 && make

Ahora para deshabilitar la modificación de append-only, ejecuta:

./lcap CAP_LINUX_IMMUTABLE
./lcap CAP_SYS_RAWIO

El primer comando remueve la capacidad para cambiar el atributo append-only y la segunda remueve la capacidad de hacer E/S. Esto es necesario para que los archivos protegidos no puedan ser modificados accediendo al bloque del dispositivo donde residen. También previenen el acceso al /dev/mem y /dev/kem, el cual proveerá un bucle para el intruso que quiere volver a habilitar la capacidad CAP_LINUX_IMMUTABLE. Para remover esa capacidad al arranque, agrega el comando anterior al script de inicio del sistema (ej. etc/rc.local). Debes asegurarte que la capacidad fue removida en el arranque, para prevenir problemas con otros scripts de inicio. Una ve que lcap ha removido la capacidad del kernel, estas pueden ser colocadas de nuevo reiniciando el sistema.

Antes de hacer esto asegúrate de añadir la opcion append-only a los archivos logs.

#54 Encriptar conecciones automaticamente

Una característica muy buena soportada por FreeS/WAN es encriptacion con otros hosts corriendo FreeS/WAN. Esto permite a FreeS/WAN encriptar transparentemente el trafico entre todos los hosts que soporta este tipo de encriptacion. Para hacer esto cada host debe tener una clave publica generada para usarse con FreeS/WAN. Esta clave puede ser grabada en un registro DNS TXT para el host. Cuando un host esta configurado para usar este tipo de encriptacion y desea iniciar una conexión encriptada con otro host, este buscara la clave publica a través de DNS y la usara para iniciar la conexión.

Para comenzar, necesitas generar la clave para cada servidor que deseas usar esta característica. Lo puedes hacer ejecutando este comando:

ipsec newhostkey --output /tmp/`hostname`.key

Ahora necesitas agregar el contenido del archivo que fue creado por el comando a /etc/ipsec.secrets:

cat /tmp/`hostname`.key >> /etc/ipsec.secrets

Luego, tienes que generar un registro TXT para ponerlo en tu zona DNS, ejecutando lo siguiente:

ipsec showhostkey --txt @colossus.nnc

Ahora agrega el registro a tu zona y recargarlo. Puedes verificar si el DNS esta trabajando correctamente corriendo este comando:

ipsec verify

Checking your system to see if IPsec got installed and started correctly
Version check and ipsec on-path [OK]
Checking for KLIPS support in kernel [OK]
Checking for RSA private key (/etc/ipsec.secrets) [OK]
Checking that pluto is running [OK]
DNS checks.
Looking for TXT in forward map: colossus [OK]
Does the machine have at least one non-private address [OK]

Ahora solo reinicia FreeS/WAN, ahora deberas estar habilitado para conectarte con otro host que soporta la encriptacion opportunistic. Pero si otros host quieren conectarse contigo, deberas crear un registro TXT para tu maquina en zona de reverso DNS.

Puedes hacer esto ejecutando lo siguiente:

ipsec showhostkey --txt 192.168.0.64

Agrega este registro a tu zona de reverso de tu subred y otra maquina podra iniciar una conexion encriptada con tu maquina. Con esta opcion todo el trafico entros los host estara encriptado.

#56 Eliminar los SUID binarios

Si tu servidor tiene mas de un usuario de consola, deberas auditar regularmente el setuid y el setgid de tu sistema. Las probabilidades de como los encontraras son sorpresivas. Aqui hay un comando para encontrar los archivos setuid o setgid:

find / -perm +6000 -type f -exec ls -ld {} \; > setuid.txt &

Esto creara un archivo llamado setuid.txt que contendra los detalles de todos los archivos encontrados que esten en tu sistema. Para remover la s de cualquier herramienta que no usas, escribe:

chmod a-s program

#57 Filtrar por MAC

Si bien es cierto que puedes hacer un filtro de MAC usando iptables o ebtables, es mas rapido si dejas que Host AP lo haga por ti. Esto no solo bloquea el trafico destinado a tu red, sino que tambien prevendra un mal comportamiento de cualquier estacion asociada. Esto prevendra que cualquiera pueda causar problemas para tus clientes inalambricos, aun si estan mas alla del acceso a la red.

Cuando usas filtrado de MAC, la mayoria de personas hacen un alista de los dispositivos inalambricos que desean permitir y denegar a los demas. Esto se hace con el comando iwpriv:

iwpriv wlan0 addmac 00:30:65:23:17:05
iwpriv wlan0 addmac 00:40:96:aa:99:fd
...
iwpriv wlan0 maccmd 1
iwpriv wlan0 maccmd 4

La directiva addmac agrega una direccion MAC a la tabla interna. Puedes agregar tantas direcciones MAC como quieras en tu tabla ejecutando mas comandos addmac. Entonces necesitas decirle a Host AP que hacer con la tabla que has construido. El comando maccmd 1 le dice a Host AP usar la tabla como lista de "permitidos" y denegar las otras MAC. Finalmente el comando maccmd 4 bota todos los clientes asociados, forzandolos a reasociarse. Esto sucede automaticamente para todos los clientes listados en la tabla, pero todos los demas que intenten conectarse seran denegados.

Algunas veces solo necesitas sacar a uno o dos problematicos, en vez de configurar una politica explicita de dispositivos permitidos. Si necesitas sacar a una pareja de MAC especificas pero permitir a otras, prueba esto:

iwpriv wlan0 addmac 00:30:65:fa:ca:de
iwpriv wlan0 maccmd 2
iwpriv wlan0 kickmac 00:30:65:fa:ca:de

Como antes, puedes usar addmac tantas veces como quieras. El comando maccmd 2 configura la politica para "denegar" y expulsa la la MAC especificada inmediatamente. Probablemente sea mas agradable iniciar a todos y hacer que se reasocien solo para botar al problematico. Incidentalmente, si quisieras remover los filtros MAC juntos, prueba maccmd 0.

Si cometiste un error tipeando una MAC, puedes usar el comando delmac igual como usarias el comando addmac, y borrara la MAC de la tabla. Si necesitas limpiar toda la tabla MAC pero mantener las politicas, usa el comando:

iwpriv wlan0 maccmd 3

Finalmente, puedes ver la tabla MAC usando /proc

cat /proc/net/hostap/wlan0/ap_control

El programa iwpriv manipula el controlador Host AP, pero no conserva las configuraciones al reiniciar. Una vez que estes contento con el contenido de tu tabla MAC, asegurate de poner los comandos relevantes en un script rc al momento de iniciar.

Ten en cuenta aun los clientes no asociados pueden escuchar el trafico de tu red, por eso el filtro MAC hace una pequeña prevencion. Para evitar las tecnicas de escucha pasivas, deberas encriptar tu data.


No hay comentarios: