La siguiente demostración implementará un ambiente seguro utilizando varios módulos MAC con políticas configuradas correctamente. Esta solamente es una prueba y no debe ser considerada una respuesta completa a las aflicciones de seguridad de todos. Solamente implementar una política e ignorarla nunca funciona y puede ser desastroso en un ambiente en producción.
Antes de iniciar este proceso, la opción multilabel debe ser aplicada a cada archivo del sistema como se declaró al principio de este capítulo. No hacerlo resultará en errores.
Inicie el procedimiento agregando la siguiente clase de usuario al archivo /etc/login.conf:
insecure:\ :copyright=/etc/COPYRIGHT:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin :manpath=/usr/share/man /usr/local/man:\ :nologin=/usr/sbin/nologin:\ :cputime=1h30m:\ :datasize=8M:\ :vmemoryuse=100M:\ :stacksize=2M:\ :memorylocked=4M:\ :memoryuse=8M:\ :filesize=8M:\ :coredumpsize=8M:\ :openfiles=24:\ :maxproc=32:\ :priority=0:\ :requirehome:\ :passwordtime=91d:\ :umask=022:\ :ignoretime@:\ :label=partition/13,mls/5:
Y añadiendo la siguiente línea a la clase de usuario por omisión:
:label=mls/equal,biba/equal,partition/15:
Una vez que esto se ha completado, el siguiente comando debe ejecutarse para reconstruir la base de datos:
# cap_mkdb /etc/login.conf
Agregue las siguientes líneas al archivo /boot/loader.conf para que los módulos requeridos sean cargados durante la inicialización del sistema:
mac_biba_load="YES" mac_mls_load="YES" mac_seeotheruids_load="YES" mac_partition_load="YES"
Todas la cuentas de usuarios que no sean root o usuarios de sistema ahora requerirán una clase de login. Esta clase de login es requerida o de otra manera a los usuarios se les negará acceso a comandos comunes como vi(1). El siguiente script de sh debe hacer el truco:
# for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \
/etc/passwd`; do pw usermod $x -L insecure; done;
El comando cap_mkdb necesitará ser ejecutado en /etc/master.passwd despues de este cambio.
Un archivo de contexto debe ser creado ahora; el siguiente ejemplo fué tomado del ejemplo de política de Robert Watson y debe ser colocado en /etc/policy.contexts.
# Esta es la política BIBA/MLS por omisión para este sistema. .* biba/high,mls/high /sbin/dhclient biba/high(low),mls/high(low) /dev(/.*)? biba/equal,mls/equal # This is not an exhaustive list of all "privileged" devices. /dev/mdctl biba/high,mls/high /dev/pci biba/high,mls/high /dev/k?mem biba/high,mls/high /dev/io biba/high,mls/high /dev/agp.* biba/high,mls/high (/var)?/tmp(/.*)? biba/equal,mls/equal /tmp/\.X11-unix biba/high(equal),mls/high(equal) /tmp/\.X11-unix/.* biba/equal,mls/equal /proc(/.*)? biba/equal,mls/equal /mnt.* biba/low,mls/low (/usr)?/home biba/high(low),mls/high(low) (/usr)?/home/.* biba/low,mls/low /var/mail(/.*)? biba/low,mls/low /var/spool/mqueue(/.*)? biba/low,mls/low (/mnt)?/cdrom(/.*)? biba/high,mls/high (/usr)?/home/(ftp|samba)(/.*)? biba/high,mls/high /var/log/sendmail\.st biba/low,mls/low /var/run/utmp biba/equal,mls/equal /var/log/(lastlog|wtmp) biba/equal,mls/equal
Esta política impondrá seguridad activando restricciones tanto de bajada como de subida en el flujo de información en relación a los directorios y utilidades listadas en la izquierda.
Esto puede ahora ser leído hacia nuestro sistema ejecutando el siguiente comando:
# setfsmac -ef /etc/policy.contexts / # setfsmac -ef /etc/policy.contexts /usr
Nota: El esquema de sistema de archivos de arriba puede ser diferente dependiendo del ambiente.
El archivo /etc/mac.conf requiere las siguientes modificaciones en la secci6oacute;n principal:
default_labels file ?biba,?mls default_labels ifnet ?biba,?mls default_labels process ?biba,?mls,?partition default_labels socket ?biba,?mls
Agregue un usuario con el comando adduser y coloque a ese usuario en la clase insecure para estas pruebas.
Los ejemplos de abajo mostrarán una mezcla de root y usuarios regulares de prueba; utilice el prompt para distinguie entre los dos.
% getpmac biba/15(15-15),mls/15(15-15),partition/15 # setpmac partition/15,mls/equal top
Nota: El proceso top será asesinado antes de iniciar otro proceso top.
% ps Zax biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.03 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1101 #C: R+ 0:00.01 ps Zax
No se debe permitir ver procesos propiedad de otros usuarios.
Deshabilitar la política MAC seeotheruids para el resto de estas pruebas:
# sysctl security.mac.seeotheruids.enabled=0 % ps Zax LABEL PID TT STAT TIME COMMAND biba/equal(low-high),mls/equal(low-high),partition/15 1122 #C: S+ 0:00.02 top biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.05 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1123 #C: R+ 0:00.01 ps Zax
Todos los usuarios deben tener permitido ver todos los procesos en su partición.
# setpmac partition/15,mls/equal,biba/high\(high-high\) top % ps Zax LABEL PID TT STAT TIME COMMAND biba/high(high-high),mls/equal(low-high),partition/15 1251 #C: S+ 0:00.02 top biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.06 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1157 #C: R+ 0:00.00 ps Zax
La política Biba nos permite leer objetos etiquetados más alto.
# setpmac partition/15,mls/equal,biba/low top % ps Zax LABEL PID TT STAT TIME COMMAND biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.07 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1226 #C: R+ 0:00.01 ps Zax
La política Biba no permite que objetos etiquetados como inferiores sean leídos; de todas maneras, MLS si lo permite.
% ifconfig bge0 | grep maclabel maclabel biba/low(low-low),mls/low(low-low) % ping -c 1 192.0.34.166 PING 192.0.34.166 (192.0.34.166): 56 data bytes ping: sendto: Permission denied
Los usuarios son incapaces de dar un ping a example.com, o cualquier dominio.
Para prevenir que ocurra este error, ejecute el siguiente comando:
# sysctl security.mac.biba.trust_all_interfaces=1
Esto configura la etiqueta por omisión de interfaces a modo inseguro, con ello la política Biba por omisió no será impuesta.
# ifconfig bge0 maclabel biba/equal\(low-high\),mls/equal\(low-high\) % ping -c 1 192.0.34.166 PING 192.0.34.166 (192.0.34.166): 56 data bytes 64 bytes from 192.0.34.166: icmp_seq=0 ttl=50 time=204.455 ms --- 192.0.34.166 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/stddev = 204.455/204.455/204.455/0.000 ms
Configurando una etiqueta más correcta, podemos ejecutar peticiones de ping.
Ahora para crear algunos archivos para procedimientos de prueba de lectura y escritura:
# touch test1 test2 test3 test4 test5 # getfmac test1 test1: biba/equal,mls/equal # setfmac biba/low test1 test2; setfmac biba/high test4 test5; \ setfmac mls/low test1 test3; setfmac mls/high test2 test4 # setfmac mls/equal,biba/equal test3 && getfmac test? test1: biba/low,mls/low test2: biba/low,mls/high test3: biba/equal,mls/equal test4: biba/high,mls/high test5: biba/high,mls/equal # chown testuser:testuser test?
Todos estos archivos deben ser ahora propiedad de nuestro usuario testuser. Y ahora para algunas pruebas de lectura:
% ls test1 test2 test3 test4 test5 % ls test? ls: test1: Permission denied ls: test2: Permission denied ls: test4: Permission denied test3 test5
No deberíamos tener permitido observar pares; ejemplo: (biba/low,mls/low), (biba/low,mls/high) y (biba/high,mls/high). Y por supuesto, el acceso de lectura debe estar denegado. Ahora para algunas pruebas de escritura:
% for i in `echo test*`; do echo 1 > $i; done -su: test1: Permission denied -su: test4: Permission denied -su: test5: Permission denied
Como con las pruebas de lectura, el acceso de escritura no debe ser permitido para escribir pares; ejemplo: (biba/low,mls/high) y (biba/equal,mls/equal).
% cat test? cat: test1: Permission denied cat: test2: Permission denied 1 cat: test4: Permission denied
Y ahora como root:
# cat test2 1
| Anterior | Inicio | Siguiente |
| El módulo MAC LOMAC | Subir | Otro ejemplo: Utilizando MAC para confinar un servidor web |
Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista
<questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.