Introducción

Este Artículo pretende explicar algunos puntos de seguridad de los sistemas FreeBSD, modificando y actualizando algunas opciones o funciones que vienen instaladas por default en el sistema.

No pretendo abarcar temas avanzados de seguridad ni suponer que con este articulo su FreeBSD será invulnerable, solamente pretendo ayudar a asegurar de la mejor manera posible las instalaciones por default .

Particionamiento y etiquetas

El sistema operativo debe ser asegurado desde el principio de la instalación , hay algunas cosas que se deben hacer durante el proceso de instalación las cuales prevendrán futuros problemas.

Primero que todo debemos asegurar nuestro sistema de archivos, obviamente las especificaciones de los diferentes sistemas de archivos dependerán, de las capacidades de Hardware con las que se cuenten, pero esta configuración servirá como guía Básica :


/dev/ad0s1a 10322414 46198 9450424 0% /
/dev/ad0s1e 2064302 4 1899154 0% /tmp
/dev/ad0s1g 10322414 607566 8889056 6% /usr
/dev/ad0s1h 23739868 67866 21772814 0% /usr/local
/dev/ad0s1f 3096462 5212 2843534 0% /var
procfs 4 4 0 100% /proc

Luego vemos la salida del comando mount(8)


/dev/ad0s1a on / (ufs, local)
/dev/ad0s1e on /tmp (ufs, local,nodev,nosuid, soft-updates)
/dev/ad0s1g on /usr (ufs, local, soft-updates)
/dev/ad0s1h on /usr/local (ufs, local, soft-updates)
/dev/ad0s1f on /var (ufs, local, soft-updates)
procfs on /proc (procfs, local)

En la partición Raíz (/)basta con dejar un espacio de 128 mb el cual será suficiente , Los archivos temporales son almacenados en /tmp , este directorio puede ser escrito por todos los usuarios por lo tanto es importante el no permitir que ciertos archivos sean usados de este directorio . Usando el archivo fstab(5) añadimos las banderas de NOSUID y NODEV lo que deshabilita el uso de programas SUID así como bloquea algunos dispositivos del sistema de archivos .

Después de la instalación

Niveles de Seguridad del Sistema

Para la mayoría de las Computadoras no hay razón para correr en nivel de seguridad -1, a menos que se desee ejecutar X-Windows en la Computadora. Si NO se va a correr X-Windows en la Computadora lo recomendable es cambiarse al nivel de seguridad 1 con el siguiente comando:


sysctl kern.securelevel=1
O bien para hacer este cambio permanente tenemos que agregar la siguiente
línea al archivo /etc/rc.conf .

ee /etc/rc.conf
y añadimos :
kern_securelevel_enable="YES"
kern_securelevel="1"

Este nivel de seguridad impide hacer cambios al Kernel amenos que se inicie la maquina en single user mode , también los KLD´s (Kernel loaders) no podrán ser cargados ni descargados , tampoco los dispositivos /dev/mem y /dev/kmem podrán ser abiertos para escritura

Cabe destacar que usar niveles de seguridad mayores que 0 pueden causar problemas con algunas aplicaciones que monitorean el hardware por ejemplo las que muestran la temperatura del cpu .Esto sucede por que con los niveles de seguridad se protegen algunos dispositivos así como locaciones de memoria .

Quitar el usuario toor

Por default FreeBSD trae un usuario llamado toor (root al reves) el cual tiene la función de hacerla de respaldo y recuperación en caso de desastres. La cuenta esta deshabilitada por default, se puede habilitar poniéndole password o bien eliminarla para evitar el mal uso de esta cuenta. Para eliminarla se debe :


editar el archivo : /etc/master.passwd y borrar el usuario toor
para esto ponemos el siguiente comando :

vipw
y eliminamos el usuario .

Servicios

Veremos la manera de asegurar los servicios casi indispensables para el sistema y deshabilitar aquellos que no nos sirvan

syslogd es el encargado de llevar las bitácoras del sistema , y automáticamente apunta al puerto UDP 514 , esto se puede prevenir añadiendo al archivo /etc/rc.conf la siguiente línea :
editamos el archivo : ee /etc/rc.conf
y añadimos lo siguiente:
syslogd_flags="-ss" .

portmap :Es usado para hacer llamadas remotas a procedimientos y en FreeBSD es utilizado por NFS .para deshabilitarlo se debe :


editamos el archivo : ee /etc/rc.conf
y añadimos lo siguiente:
portmap_enable="NO"

inetd es uno de los servicios que se deben evitar a toda costa ya que abre puertos inseguros como el 21 para telnet o ftp , y todo el trafico en este puerto viaja SIN encriptar es decir , cualquiera que instale un sniffer en nuestra red podría comprometer en serio la seguridad del sistema, para deshabilitarlo se debe :


editamos el archivo : ee /etc/rc.conf
y añadimos lo siguiente:
inetd_enable="NO"

ssh sustituye a telnetd como una manera eficaz de comunicarse con los servidores , ya que encripta la información , actualmente viene por default , en las instalaciones de FreeBSD pero tenemos que modificar algunos valores del archivo de configuración /etc/ssh/sshd_config para hacerlo mas seguro :


hacemos lo siguiente :
ee /etc/ssh/sshd_config
En el cual buscamos las siguiente líneas: #Port 22
#Protocol 1 2

Y las sustituimos por:
Port 22
Protocol 2

Con esto aseguramos que se utilice solamente el puerto 22 y el protocolo 2 , para la transferencia de datos .

log_in_vain Hasta ahora hemos deshabilitado algunos servicios pero, seria muy útil saber quien esta tratando de conectarse a los servicios y/o puertos que NO están habilitados para hacer esto tenemos que agregar la siguiente línea en el archivo /etc/rc.conf


para esto hacemos:
ee /etc/rc.conf
y agregamos :
log_in_vain="YES"
para habilitarlo SIN reiniciar el servidor tenemos que ejecutar:
sysctl net.inet.tcp.log_in_vain=1
sysctl net.inet.udp.log_in_vain=1

Con esto los intentos Fallidos de conexión a puertos o servicios cerrados , serán guardados en /var/log/messages .

blackhole a diferencia de log_in_vain , blackhole bloquea e ignora todo trafico UDP/TCP que va dirigido a puertos y/o servicios cerrados , con esto se podrían reducir los ataques de DoS (denial of service) . para hacer esto debemos modificar el archivo /etc/sysctl.conf añadiendo lo siguiente :


primero editamos el archivo :
ee /etc/sysctl.conf
añadimos :
net.inet.tcp.blackhole=1
net.inet.tcp.blackhole=1

Crontabs existen algunos archivos que no queremos que todos los usuarios puedan ver , especialmente el archivo de cron del usuario root , para impedir que el archivo /etc/crontab sea visto por los usuarios NO autorizados se debe de :


cambiamos los permisos del archivo :
chmod 640 /etc/crontab.
Tampoco queremos que usuarios usen el cron a placer así que restringiremos a algunos usuarios creando una lista de usuarios en el archivo : /var/cron/deny y a los usuarios que queremos que usen cron los agregamos a : /var/cron/allow .

Sendmail: se inicia por default cuando se prende el sistema para impedir que lo haga añadimos la siguiente línea al archivo : /etc/rc.conf


sendmail_enable="NONE"
esto impide que Sendmail arranque de manera automática .

Seguridad en Passwords: el tipo de encriptado que viene por default en FreeBSD es el MD5 , que es ya algo antiguo , para sustituir este tipo de encriptado por uno mas actual llamado BLOWFISH o BLF se debe hacer lo siguiente :


editamos el archivo : /etc/login.conf y modificamos la siguiente línea :
:passwd_format=blf:\
guardamos los cambios y ejecutamos el siguiente comando : cap_mkdb /etc/login.conf
Una vez realizado este cambio se deben de cambiar los passwords existentes para tomar el nuevo método de encriptado usando el comando : passwd .

Finalmente configuraremos el comando adduser para que de ahora en adelante todos los nuevos usuarios que se creen , vengan con BLF , para esto editamos el archivo : /etc/auth.conf y modificamos la siguiente línea :


crypt_default=blf

Para Impedir que se cambie el password de root en single mode se debe modificar el archivo /etc/ttys y cambiar :


editamos el archivo :
ee /etc/ttys

modificamos :
console none secure
por :
console none insecure

con esto impedimos que algún usuario con acceso físico al servidor lo reinicie en sigle mode y cambie el password de root.

Monitoreo de Procesos : Siempre es bueno saber exactamente que esta pasando en nuestro servidor así como que comandos fueron ejecutados por los usuarios , para habilitar eso ejecutaremos los siguientes comandos :


touch /var/account/acct
accton /var/account/acct
para hacer esto permanente añadimos la siguiente línea al archivo : /etc/rc.conf

accounting_enable="YES"
una vez que lo hemos habilitado podemos usar los comandos : lastcomm(1), y sa(8) para obtener las estadísticas de la base de datos de procesos .

KERNEL : aprovecharemos para agregar y/o modificar algunas opciones en el Kernel de FreeBSD , el cual su archivo de configuración se encuentra en : /usr/src/sys/i386/conf/GENERIC , lo que haremos primero es respaldar el archivo original:


ejecutamos :
cd /usr/src/sys/i386/conf/
cp GENERIC NUEVO_KERNEL
editamos el archivo :
ee NUEVO_KERNEL
y añadimos y/o modificamos las siguientes opciones :

options RANDOM_IP_ID
esta opción forza a que el campo ID de los paquetes TCP sea creado al azar en lugar de irlo incrementando en 1 como viene por default .

options SC_DISABLE_REBOOT
Con esta opción impedimos que usuarios que tengan acceso físico al servidor , lo puedan reiniciar con CONTROL+ALT+SUPR .
Con esto terminamos el tunning BASICO del Kernel .

Permisos de Directorio : Es muy importante saber , que es lo que los usuarios pueden ver , por ejemplo no queremos que los usuarios tengan acceso al contenido de la carpeta de /root . Ejecutando un: "chmod 0750 /root" , impedirá que vean el contenido , a menos que se encuentren en el grupo Wheel . Si no queremos que los usuarios de Wheel tengan acceso al directorio ejecutamos un: "chmod 0700 /root" y con esto solo el usuario de root tendrá acceso a su directorio .

Ocultando Procesos : Se pueden limitar los procesos que los usuarios pueden ver cuando ejecutan el comando ps . Por default FreeBSD permite a los usuarios ver todos los procesos , incluidos los que NO les pertenecen para evitar esto , ejecutamos los siguientes comandos :


sysctl kern.ps_showallprocs=0
para hacer este cambio permanente se debe insertar la siguiente línea al archivo /etc/sysctl.conf :

editamos : ee /etc/sysctl.conf
añadimos
kern.ps_showallprocs=0

Espero que este articulo sea de utilidad

Dudas y comentarios son bienvenidos
Jesús Leal Elizondo
jleal@terared.com.mx