NFS

NFS es un sistema de archivos de red desarrollado por Sun Microsystems con el mismo propósito que SMB: acceder a sistemas de archivos a través de una red como si fueran locales. Sin embargo, NFS utiliza un protocolo completamente diferente. NFS es utilizado entre sistemas Linux y Unix, lo que significa que los clientes NFS no pueden comunicarse directamente con servidores SMB. NFS es un estándar de Internet que regula los procedimientos en un sistema de archivos distribuido.

Si bien la versión 3.0 del protocolo NFS (NFSv3), que ha estado en uso durante muchos años, autentica la computadora cliente, esto cambia con NFSv4, donde, al igual que con el protocolo SMB de Windows, el usuario debe autenticarse.

VersiĂłn
CaracterĂ­sticas

NFSv2

Es más antigua pero es compatible con muchos sistemas, y al principio funcionaba completamente sobre UDP.

NFSv3

Ofrece más características, como tamaño de archivo variable y mejor reporte de errores, pero no es totalmente compatible con clientes NFSv2.

NFSv4

Incluye Kerberos, funciona a través de cortafuegos y en Internet, ya no requiere portmappers, soporta ACLs, aplica operaciones basadas en estado, y ofrece mejoras de rendimiento y alta seguridad. Es la primera versión con un protocolo basado en estado.

La versión 4.1 de NFS (RFC 8881) busca proporcionar soporte de protocolo para aprovechar implementaciones de servidores en clústeres, incluyendo la capacidad de ofrecer acceso paralelo escalable a archivos distribuidos en varios servidores (extensión pNFS). Además, NFSv4.1 incluye un mecanismo de session trunking, también conocido como NFS multipath. Una ventaja importante de NFSv4 sobre sus predecesores es que solo usa un puerto UDP o TCP, el 2049, para ejecutar el servicio, lo que simplifica el uso del protocolo a través de cortafuegos.

NFS se basa en el protocolo Open Network Computing Remote Procedure Call (ONC-RPC/SUN-RPC) expuesto en los puertos TCP y UDP 111, utilizando External Data Representation (XDR) para el intercambio de datos independiente del sistema. El protocolo NFS no tiene un mecanismo para autenticación o autorización. En su lugar, la autenticación se delega completamente a las opciones del protocolo RPC. La autorización se deriva de la información disponible en el sistema de archivos. En este proceso, el servidor es responsable de traducir la información del usuario del cliente al formato del sistema de archivos y convertir los detalles de autorización correspondientes al formato UNIX requerido lo más exactamente posible.

Autenticación más común en NFS

La autenticación más común es a través de UID/GID de UNIX y las membresías de grupo, que es el formato que más probablemente se aplique al protocolo NFS. Un problema es que el cliente y el servidor no necesariamente deben tener las mismas asignaciones de UID/GID para usuarios y grupos, y el servidor no necesita hacer nada más. No se pueden realizar más verificaciones por parte del servidor, por lo que este método de autenticación solo debe usarse en redes confiables.

ConfiguraciĂłn predeterminada

NFS no es difícil de configurar, ya que no tiene tantas opciones como FTP o SMB. El archivo /etc/exports contiene una tabla de sistemas de archivos físicos en un servidor NFS que son accesibles por los clientes. La tabla de exportaciones NFS muestra qué opciones acepta y, por lo tanto, indica qué opciones están disponibles para nosotros.

Archivo /etc/exports

sherlock28@htb[/htb]$ cat /etc/exports 

# /etc/exports: la lista de control de acceso para los sistemas de archivos que pueden ser exportados
#               a clientes NFS.  Ver exports(5).
#
# Ejemplo para NFSv2 y NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Ejemplo para NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)

El archivo de exportaciones predeterminado también contiene algunos ejemplos de configuración de NFS shares. Primero, se especifica la carpeta que se hará disponible a otros, y luego se conectan los derechos que tendrán en este NFS share a un host o una subred. Finalmente, se pueden agregar opciones adicionales a los hosts o subredes.

OpciĂłn
DescripciĂłn

rw

Permisos de lectura y escritura.

ro

Permisos de solo lectura.

sync

Transferencia de datos síncrona. (Un poco más lenta)

async

Transferencia de datos asíncrona. (Un poco más rápida)

secure

No se usarán puertos por encima de 1024.

insecure

Se usarán puertos por encima de 1024.

no_subtree_check

Esta opciĂłn desactiva la verificaciĂłn de subdirectorios.

root_squash

Asigna todos los permisos de archivos del UID/GID root (0) al UID/GID anĂłnimo, lo que impide que root acceda a archivos en un montaje NFS.

Vamos a crear una entrada de prueba y jugar con la configuraciĂłn.

ExportFS en NFS

Hemos compartido la carpeta /mnt/nfs con la subred 10.129.14.0/24 con la configuración que se muestra arriba. Esto significa que todos los hosts en la red podrán montar este NFS share e inspeccionar el contenido de esta carpeta.

Configuraciones Peligrosas en NFS

Sin embargo, incluso con NFS, algunas configuraciones pueden ser peligrosas para la empresa y su infraestructura. AquĂ­ se enumeran algunas de ellas:

OpciĂłn
DescripciĂłn

rw

Permisos de lectura y escritura.

insecure

Se utilizarán puertos por encima de 1024.

nohide

Si otro sistema de archivos está montado debajo de un directorio exportado, este directorio se exporta por su propia entrada en /etc/exports.

no_root_squash

Todos los archivos creados por root se mantienen con el UID/GID 0.

Se recomienda encarecidamente crear una máquina virtual local y experimentar con las configuraciones. Descubriremos métodos que nos mostrarán cómo está configurado el servidor NFS. Para esto, podemos crear varias carpetas y asignar diferentes opciones a cada una. Luego, podemos inspeccionarlas y ver qué efectos tienen en el NFS share, sus permisos y el proceso de enumeración.

Podemos observar la opción insecure. Esta es peligrosa porque permite a los usuarios utilizar puertos por encima de 1024. Los primeros 1024 puertos solo pueden ser utilizados por root, lo que evita que usuarios normales usen sockets sobre el puerto 1024 para el servicio NFS e interactúen con él.

IdentificaciĂłn del Servicio (Footprinting) NFS

Al realizar footprinting de NFS, los puertos TCP 111 y 2049 son esenciales. También podemos obtener información sobre el servicio NFS y el host a través de RPC, como se muestra en el siguiente ejemplo.

Nmap

El script rpcinfo de Nmap muestra una lista de todos los servicios RPC actualmente en ejecución, sus nombres, descripciones y los puertos que utilizan. Esto nos permite verificar si el share objetivo está conectado a la red en todos los puertos necesarios.

Además, Nmap tiene algunos scripts NSE específicos para NFS que pueden utilizarse para los escaneos. Estos scripts pueden, por ejemplo, mostrar el contenido del share y sus estadísticas.

Una vez que hayamos descubierto un servicio NFS, podemos montarlo en nuestra máquina local. Para ello, creamos una carpeta vacía a la que se montará el share NFS. Una vez montado, podremos navegar por el share y ver el contenido como si fuera parte de nuestro sistema local.

Mostrar NFS Shares Disponibles

Montar el NFS Share

AquĂ­ tendremos la oportunidad de acceder a los permisos, nombres de usuarios y grupos a los que pertenecen los archivos mostrados. Una vez que tengamos los nombres de usuario, nombres de grupos, UIDs y GIDs, podemos crearlos en nuestro sistema y adaptarlos al share NFS para ver y modificar los archivos.

Listar Contenido con Nombres de Usuario y Grupos

Listar Contenido con UIDs y GIDs

Es importante tener en cuenta que si la opción root_squash está configurada, no podremos editar el archivo backup.sh, incluso como root.

NFS puede usarse para una mayor escalada. Por ejemplo, si tenemos acceso al sistema a través de SSH y queremos leer archivos de otra carpeta a la que un usuario específico tiene acceso, podríamos subir una shell al share NFS con el SUID de ese usuario y luego ejecutar la shell a través del usuario de SSH.

Después de realizar todos los pasos necesarios y obtener la información deseada, podemos desmontar el share NFS.

Desmontar el NFS

Last updated

Was this helpful?