扫一扫
关注微信公众号

详细解析Null值攻击及防御的方法
2010-01-27   网络

 

  早在windows 2000时代,空会话攻击就已经被发现,然而系统管理员在强化网络时经常忘记考虑空会话攻击问题,这可能带来灾难性后果,因为空会话可能会泄漏关键信息助攻击者获取远程访问系统的权限。

 

  虽然说,空会话攻击是很“古老”的攻击方式,但现在它却又开始像几年前一样肆虐起来。尽管现在的系统已经不那么容易受到攻击,然而在针对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;)

 

  这不能够阻止空会话枚举的发生,但是会提醒你枚举的发生,从而采取适当行动。

 

  总结

 

  空会话攻击概念并不是新的攻击方式,但是却常常被忘记和误解。这种方式对于攻击者而言,仍然是非常可行的攻击策略,了解空会话攻击的方式是系统管理员的必修课。

热词搜索:

上一篇:小心启动项,保护系统安全
下一篇:Chinasec建设可行的企业数据保密体系

分享到: 收藏