IPC$
我有一个 samba 服务器,出于安全原因(用户和共享枚举、用户信息查询等)我已禁用对共享 [1] 的访问。
我可以从任何基于 Unix 的计算机访问此服务器上的数据共享,没有任何问题mount.cifs
。但是,当我尝试从 Windows 计算机(使用 Windows 7 和 10 进行测试)访问它们时,我得到了拒绝访问提供我的凭证后立即出现错误。
记录 SMB 流量后,我注意到 Windows 计算机在尝试访问我提供的共享之前总是在共享Tree connect request
上执行操作(通过IPC$
映射网络驱动器或者添加网络位置)。我的 Samba 服务器返回拒绝访问对于IPC$
共享,Windows 从不尝试访问我想要的共享。
所以我的问题是,如何才能阻止 Windows 执行这个无用的请求,IPC$
而只访问我提供的共享?或者至少如何才能强制 Windows 在IPC$
返回共享后访问真正的共享拒绝访问?
提前感谢您的帮助并祝您节日快乐!
海绵宝宝
[1]https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/securing-samba.html#id2618877
答案1
所以我的问题是如何才能阻止 Windows 发出这个无用的请求……? 或者至少我如何才能强制 Windows 访问真实共享?
答案是你不能!很抱歉,但事实就是如此。然而,尽管这是对你问题的真正答案 - 我不想听起来毫无帮助。我确实想提供帮助,所以希望以下是我能给出的最好的建议,对你的情况有用。
我是一名专业的渗透测试人员,经常使用匿名共享访问(例如 IPC$)来获取有关系统的信息并侵入系统以进行合法的测试。关键是要防止匿名用户(没有有效凭证的人)枚举用户和共享。一旦获得有效凭证,通常还有其他方法可以枚举用户(例如 cat /etc/passwd),而且这对攻击者来说不再那么重要。
您引用的文章包含以下内容:
如果使用此方法,则客户端在尝试访问 IPC$ 共享时将收到“拒绝访问”答复。这些客户端将无法浏览共享,也可能无法访问其他一些资源。不建议这样做除非由于某种原因您不能使用刚才讨论的其他方法之一。
不推荐这样做的原因是“那些客户端……可能也无法访问其他资源。”Windows 无法访问机器上的任何共享就是一个例子。不幸的是,Windows 需要访问 IPC$ 才能查看其他共享。如果它看不到 IPC$,它就会假设没有其他可用的共享并放弃。
Linux 客户端的 Samba 实现方式略有不同,因此不会遇到同样的问题。由于没有办法解决这个问题,我只能确保 IPC$ 共享不会向匿名用户泄露信息。
使用基于主机的保护和基于用户的保护您发送的文章的部分内容是防止对 Samba 的所有部分(包括来自不受信任来源的 IPC$ 共享)进行不良访问的好方法,并且可能为您提供所需的一切。
但是,本页面的指定部分提供了进一步的建议: https://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html
要查看的部分:
“基于访问的共享枚举”
“可浏览”- 将所有共享(IPC$ 除外)设置为“否”应可阻止它们显示,但 Windows 仍应能够访问
“guest ok”-测试在 IPC$ 共享上设置为“no”是否可以阻止 Windows 访问其他共享
如果您使用 winbind,请设置以下内容以防止枚举这些:
winbind enum groups = no
winbind enum users = no