NFS服务攻防

admin 2024年2月14日20:54:47评论11 views字数 2843阅读9分28秒阅读模式

0x00 前置知识

NFS全称为Network File System,翻译过来是网络文件系统。它可以通过网络共享目录和文件给其他人。通过使用NFS,用户基本上可以像访问本地文件一样顺便访问到共享目录/文件,这种技术也被称为挂载。当然只是能访问一部分不能全部都不访问。

这里在稍微讲一下它的运行过程。首先,客户端会在本地对远程服务器发起一个请求,请求挂载某个文件夹到本地。然后挂载服务就会开始运行,服务器这边会先检查发起请求的用户是否具有权限去挂载某个目录/文件。一切顺利的话,服务器会返回一个文件句柄(这是用来标记服务器上每个文件/目录类似给它们打上一个ID)。

当两边互相验证完以后就可以开始访问远程文件了。此时会对服务器上的NFSD(NFS守护程序)进行RPC调用。调用会有以下参数:

File handle(文件句柄)

The name of the file to be accessed(要访问的文件名)

The users',user ID(用户和其ID)

The user's group ID(用户组ID)

这些用于确定对指定文件的访问全选。这是控制用户权限的东西,即文件的读写。

0x01NFS服务配置

服务端配置:(server)

配置一般存放于/etc/exports文件或/etc/dfs/dfstab中

NFS服务攻防

这是一个NFS共享目录的配置,其中/home/toor是共享目录的路径192.168.152.0/24 是允许访问该共享目录的客户端IP地址范围。rw、sync 和 no_subtree_check是NFS共享的选项。

各个参数的含义如下:

·/home/toor:共享目录的路径。

·192.168.152.0/24:允许访问该共享目录的客户端IP地址范围。

·rw:表示将共享目录以读写模式挂载到客户端上,客户端可以对该目录进行读取和写入操作。

·sync:表示 NFS 服务器必须等待,直到所有数据都被写入磁盘才会响应客户端的请求。

·no_subtree_check:表示忽略子目录的权限检查。默认情况下,NFS会检查共享目录下的每个子目录是否有访问权限,但这样会影响性能,因此在某些情况下可以禁用该功能。(详细解释见下文)

NFS服务攻防

exportfs -s 查看 nfs 服务已加载的配置情况。

修改 /etc/exports 文件不会自动应用到当前 nfs,需要通过 exportfs -rv 重载。

root_squash 是默认选项,root 用户会被映射成匿名用户,即客户端的 UID 与 GID 都会变成 nobody 用户的 UID 和 GID。(详细解释见下文)

no_root_squash 选项,root 用户不会被映射成匿名用户。(详细解释见下文)

客户端挂载:(client)

client查看共享目录,将共享目录挂载到客户端上

NFS服务攻防

NFS服务攻防

权限问题

当您在客户端挂载NFS共享时,如果client报告的UID(用户ID)与server上的UID不一致,则可能会导致权限问题。

解决这个问题的一种方法是在客户端挂载NFS共享时使用-o uid=xxx选项,其中xxx是您希望在客户端使用的UID。例如:

mount -t nfs -o uid=1000 server:/path /mnt

如果您在服务器上有相应的用户帐户,并且希望使用它的权限,则可以使用-o username=xxx选项:

mount -t nfs -o username=user server:/path /mnt

请确保在挂载NFS共享之前您有足够的权限执行此操作。

或者通过修改配置

root_squash

默认配置为root_squash,客户端访问出错,无读取无写权限,无法进入

NFS服务攻防

修改共享目录所有者及组,客户端就有权利进行读,写。

具体操作步骤如下

NFS服务攻防

no_root_squash

配置设置为no_root_squash 选项,root 用户不会被映射成匿名用户,表示允许 root 用户在客户端上具有与远程服务器上相同的权限可读可写

NFS服务攻防

NFS服务攻防

配置no_subtree_check

当前默认为root_squash,更改为nobody为所有者和nogroup组

NFS服务攻防

创建文件夹为root所有者及组

client下子目录不进行权限检查

NFS服务攻防

0x02 NFS服务安全配置分析

在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。如今NFS具备了防止被利用导出文件夹的功能,但遗留系统中的NFS服务配置不当,则仍可能遭到恶意攻击者的利用,甚至获取shell。

1.在服务端系统缺省的情况下,export目录时,如果不指定只读,该目录为可写;NFS的访问控制文件很容易出现错误配置,很多情况下配置为可以被网上任何一台机器访问,远程用户可以用这条命令来查到是否有NFS的配置漏洞。造成未授权读写等

NFS服务攻防

nmap发现服务,showmount检索信息,或者使用MSF模块

showmount -e domain/ip
auxiliary/scanner/nfs/nfsmount

2.在客户端的NFS请求中的用户认证,是由用户的UID和所属组的GID组成,但NFS服务器不管这个UID是不是自己服务端的,只要UID符合,就赋予这个用户相应的操作权。在此过程中攻击者可以用root设置对应的UID,再去挂载就可以获得文件操作权。

具体操作步骤如下:

NFS服务攻防

由于该文件的UID与新用户的UID相同,因此系统会误认为这是文件权限的所有者,这样我们就可以以一个合法的用户身份来读取文件的内容了。

之所以造成这种问题,原因在于导出文件夹并未设置root_squash选项。root_squash登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份,以防止越权访问。

还有一种UID欺骗,是关于16位UID和32位UID的问题。大多NFS服务接受的来自客户对NFS请求所发送的UID标志都是16位的(Solaris是一个例外),这是不安全的。

3.以前的文件句柄无须mount守护进程的帮助就可以构造,使客户直接可以和NFS通信。而现在的系统大多进行了改进。但BSD系统还有问题。未授权用户可以得到文件的句柄。正确的程序应该只允许这些信息暴露给root。

4.把含有SUID程序的目录export,并且该文件有执行权。SUID程序相当于超级用户本身。可直接获得超级用户身份shell

0x03 NFS服务防护

1.修改配置文件,export出的文件系统设置为只读,严格限制client的IP。

2.禁止有SUID特性的程序的执行。

3.使用AFS服务取代

参考链接:

https://adoyle.me/Today-I-Learned/others/nfs.html

https://blog.csdn.net/cnbird2008/article/details/1878074

原文始发于微信公众号(Crystal Equation):NFS服务攻防

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月14日20:54:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   NFS服务攻防http://cn-sec.com/archives/2492229.html

发表评论

匿名网友 填写信息