详解空会话攻击及防御 空会话攻击可以说是一种很古老的网络攻击形式,已经古老到系统管理员几乎忘却了还有这种攻击形式的存在。但现在它却又开始像几年前一样肆虐起来。尽管现在的系统已经不那么容易受到攻击,然而在针对windows设备执行渗透测试时,空会话枚举仍然是最先要做的事情之一。本文的目的在于分析空会话攻击,并探讨如何防止空会话攻击的发生。
空会话攻击过程
当用户使用用户名和密码(可以访问系统资源的登陆帐户)远程登陆到计算机时就创建了一个远程会话,这是通过服务器消息模块(SMB)和Windows Server服务来实现的,当提供正确登陆信息时这些连接都是完全合理的。
当用户没有使用用户名或者密码来与windows系统建立连接时就会出现空会话,这种类型的连接不能进行任何典型的windows共享,但是可以进行进程间通信(IPC)管理共享。IPC共享,是windows进程(通过SYSTEM用户名)来与网络其他进程进行通信的,IPC共享是SMB协议专用的。
没有登陆凭证使用IPC共享是专供程序间通信使用的,但这并不是说用户不能通过IPC连接代替连接到计算机。这种方式不允许对计算机的无限制访问,但广泛枚举可能会帮助攻击者发起攻击。
通过空会话进行枚举
现在我们知道空会话是如何发生的,那么攻击者如何利用空会话发动攻击呢?可以说,攻击者可以很轻松地利用空会话。空会话连接可以通过简单使用NET命令从windows命令行直接产生,不需要额外的工具。NET命令可以用来执行各种管理功能,使用NET命令我们可以尝试对目标主机(命名为HACKME)上的标准共享建立连接,但是这样会失败,因为我们没有提供正确的登陆凭证。
如何防御空会话攻击
首先你会问的问题是:“我的系统容易受到攻击吗?”这个问题的答案取决于网络环境中的操作系统,如果运行的是Windows XP、Windows Server 2003或者Windows 2000,答案是肯定的,至少在某种程度上来看。虽然现在大多数人都在使用这些版本以上的系统,不过Windows XP和Server 2003仍然是使用最多的系统,但还是可以通过其他防御来防止空会话攻击的。
在注册表中限制空会话攻击
事实上,大多数公司由于资金紧缺问题,一直还在使用旧版本的软件,这也是为什么到处可见windows 2000工作站和服务器的原因。如果你仍然在使用Windows 2000,那么可以通过简单的修改注册表来防止通过空会话的信息提取。
打开regedit,浏览
HKLM/System/CurrentControlSet/Control/LSA/RestrictAnonymous,你可以配置这三种设置选择:
· 0 – 默认设置,无限制空会话访问
· 1 – 不排除空会话,但是防止用户名和共享的枚举
· 2 – 通过严格限制对所有资源的访问,从而防止任何值从空会话流失
正如你所见,你不能100%的消除空会话,但是你可以通过设置2来严格限制攻击者的攻击,在windows2000服务器上配置时要非常注意,因为可能会破坏集群。
你可以在windows XP和2003服务器中执行类似的操作,主要通过以下三种不同的注册表项:
HKLM\\System\\CurrentControlSet\\Control\\Lsa\\RestrictAnonymous · 0 – 默认设置,空会话可以用于枚举共享 · 1 –空会话不可以用于枚举共享
HKLM\\System\\CurrentControlSet\\Control\\Lsa\\RestrictAnonymousSAM · 0 –空会话可以用于枚举用户名
· 1 –默认设置,空会话不可以用于枚举用户名
HKLM\\System\\CurrentControlSet\\Control\\Lsa\\EveryoneIncludesAnonymous · 0 –默认设置,空会话没有特殊权力
· 1 – 空会话被认为是成员组的部分(非常危险,可以允许共享访问)
你可以清楚地从上述内容中看出,默认情况下,windows XP只允许共享的枚举,这样比windows 2000更加安全。
从网络级别阻止访问
如果你不能对上述注册表进行修改,那么你可以通过windows防火墙或者网络防火墙阻止空会话攻击,这可以通过组织与NetBIOS和SMB TCP/IP有关的端口来实现,这些端口包括:
· TCP Port 135 · UDP Port 137 · UDP Port 138 · TCP Port 139 · TCP和 UDP Port 445
这些端口用于windows的各种网络功能,包括文件共享,网络打印功能、集群和远程管理等。话虽如此,在关闭这些端口之前应该进行全面的测试,以确保系统正常运行。
使用IDS识别空会话
如果上述注册表修改或者防火墙政策破坏了网络应用程序的功能性,那么你必须将防御工作调整为被动方式,而不是主动方式。除了阻止空会话枚举之外,最后的希望就是在发生枚举的时候我们能够阻止它。
如果你正在使用Snort,也就是现在最常用的IDS,那么进行以下操作就可以检测所有空会话枚举:
alert tcp $EXTERNAL_NET any -> $HOME_NET 139 (msg:”NETBIOS NT NULL session”; flow:to_server.establshed;
content: ‘|00 00 00 00 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 20 00 4E 00 54 00 20 00 31 00 33 00 38 00 31|’; classtype:attempted-recon;)
这不能够阻止空会话枚举的发生,但是会提醒你枚举的发生,从而采取适当行动。 总结
空会话攻击概念并不是新的攻击方式,但是却常常被忘记和误解。这种方式对于攻击者而言,仍然是非常可行的攻击策略,了解空会话攻击的方式是系统管理员的必修课。
SMB介绍以及相关安全知识 Volume 0x0b, Issue 0x3c, Phile #0x0b of 0x10
│=---------------------=[ SMB/CIFS BY THE ROOT ]=------------------------=│ │=-----------------------------------------------------------------------=│ │=---------------=[ ledin ]=-----------------=│
│=-----------------------------------------------------------------------=│
本文提到了如何探测远程主机的SMB信息。您可以使用 T-SMB 这个工具来获取你所想要的信息,
包括操作系统指纹,共享目录,用户与组,传输列表及其他信息。您可以在中华安全网(SafeChina)
下载此软件。下载地址:
http://www.safechina.net/download/click.php?type=本站原创&id=1040000080
--[ 目录 1 - 介绍
2 - 什么是SMB/CIFS ? 3 - 会话的建立
客户端如何与服务器建立一个SMB会话 ? 4 - SMB的安全等级 5 - 密码
6 - 几种SMB数据报的描述 6.1 - SMB数据报的常规特征 6.2 - NETBIOS与SMB
6.3 - SMB的基础报文头部 6.4 - 重要SMB命令的描述
6.5 - 我们如何才能将本应该加密的SMB密码清楚的还原 ? 6.6 - Man in the middle 攻击
6.7 - 注意Windows 2k/XP里基于TCP的SMB操作 7 - 事物处理子协议与RAP命令
7.1 - 事物处理子协议 7.2 - RAP命令
8 - 使用RAP命令列出服务器上所有可得的共享列表 8.1 - Tconx数据报
8.2 - RAP命令“NetshareEnum”的解释 9 - 结论 10 - 参考 11 - 感谢
--[ 1 - 介绍
本文,我将向大家解释什么是CIFS和SMB,它们如何工作和这些协议里一些共同的不安全隐患。
本文将会成为学习微软网络知识的一个有用资源。SMB协议是一个在LAN中非常通用的协议了。我为
大家提供了一个关于如何操作SMB例子的源代码。
你将会学习到在所有SMB密码都是加密的情况下,如何使用ARP毒药来获得清晰的SMB密码(不需要
粗鲁与暴力)。你将会理解SMB与NETBIOS之间的关系。你同样会学到什么是微软远程管理协议(RAP),
以及如何使用它来扫描远程SMB服务器上的共享资源。
本文提供的程序和资料都只有一个教育性的目的。你将用它来做的任何事情与我无关。
--[ 2 - 什么是SMB/CIFS ?
依照微软的意思,CIFS是为客户系统在网络上向服务器请求文件和打印服务的开放跨平台的运行 机制。它是建立在广泛应用于个人电脑和工作站等操作系统的标准服务器消息块(SMB)协议。 实际上,SMB是一个通过网络在共享文件,设备,命名管道和邮槽之间操作数据的协议。CIFS是
SMB的一个公共版本。 SMB客户端的可用系统:
for Microsoft :
Windows 95, Windows for workgroups 3.x, Windows NT,2000 and XP